Retrofit2 如何在請求時使用動態URL

2021-08-03 04:58:25 字數 2042 閱讀 3421

retrofit2為動態url帶來的新的註解,在retrofit 1中迷惑的點現在只需要乙個url註解就能描述結點(endpoint)。

這篇文章將會展示如何利用動態結點url處理單獨的請求。

retrofit 2 — how to use dynamic urls for requests

使用案例情況

這裡有兩個案例來說明真實的應用場景。

怎麼使用動態urls

實際上,它只需要你加入乙個單獨的註解@url在你的定義的結點,一圖勝千言

public

inte***ce

userservice

可以看到,在get上不需要結點url,我們可以直接在方法中去新增這個url

urls是怎麼針對base url解析的

有另外乙個有趣而且需要注意的地方:動態url是怎麼在已經定義base url的情況下被解析的,retrofit 2使用okhttp的 httpurl 而且解析任何url結點成類似乙個**的鏈結。

讓我們根據一些場景來明白這個過程,首先我們有乙個url指向amazon s3(注:乙個雲服務平台,類似七牛)中儲存的乙個位址,而且我們也已經定義了乙個base url,這兩個的位址是完全不一樣的,

retrofit retrofit = retrofit.builder()  

.baseurl("");

.build();

userservice service = retrofit.create(userservice.class);

service.profilepicture("");

// request url results in:

//

因為你設定了乙個完全不同的包含scheme的host ( vs.  ,okhttp的httpurl會解析它成我們設定的url,這個和我們所定義的base url並沒有關係。

第二個例子:這次我們指定動態url在我們已經定義的base url同乙個服務下面,比如下面的**

retrofit retrofit = retrofit.builder()  

.baseurl("");

.build();

userservice service = retrofit.create(userservice.class);

service.profilepicture("profile-picture/path");

// request url results in:

// profile-picture/path

retrofit retrofit = retrofit.builder()  

.baseurl("v2/");

.build();

userservice service = retrofit.create(userservice.class);

service.profilepicture("/profile-picture/path");

// request url results in:

// profile-picture/path

第二和第三個例子的不同點就是:我們新增了乙個v2/到base url後面並且在結點url的前面新增了乙個/。實際上這將會最終生成同樣的url,因為結點url的前面是乙個/符號,這個將會只新增到base url的host上面。當我們在結點url上新增乙個前置/符號時,每個加到host url後面的東西都會被省略掉。刪除前置/有時候可以解決你的一些不明白的問題。

分析提示

正確的「建立」請求url是你需要注意的問題。這些文章中的例子展示了一些容易犯的錯誤,一不小心就可能陷入這個陷阱中,確保你在請求時使用了乙個完全的url(包括scheme,host,path),否則你不得不去考慮上面的這些場景。

retrofit譯稿

Retrofit2 如何在請求時使用動態URL

retrofit2為動態url帶來的新的註解,在retrofit 1中迷惑的點現在只需要乙個url註解就能描述結點 endpoint 這篇文章將會展示如何利用動態結點url處理單獨的請求。retrofit 2 how to use dynamic urls for requests 使用案例情況 這...

Retrofit2對https請求的實現(乾貨)

由於專案上傳到googleplay時被提醒傳輸資料方式不安全,故改用https加密傳輸。這裡我的專案裡用到retrofit2.2.0,但retrofit本身的okhttp不能直接請求證書不安全的https,所以得採取一些應急措施。首先我們在androidstudio裡的gradle依賴retrofi...

使用Retrofit2進行HTTP請求設定請求超時

採用retrofit2本身可以進行優雅的restful請求,但是無法設定請求超時時間,需要配合okhttp3來設定請求超時.新增依賴 compile com.squareup.okhttp3 logging interceptor 3.0.1 新增配置資訊並設定超時時間 connecttimeout...