1. 程式人生 > >Retrofit 2.0全部註解及注意事項

Retrofit 2.0全部註解及注意事項

在這裡插入圖片描述

文章目錄

一.導圖

Retrofit 共22個註解,根據功能大概分為三類:
在這裡插入圖片描述

二.請求方法類

請求方法類共8個註解。

1.除@HTTP外其他7個:

  • 均對應http的請求方法;
  • 均接收一個字串表示介面 path ,與 baseUrl 組成完整的 Url:baseUrl+path;
  • path 中可以使用變數,如 {id} ,並使用 @Path(“id”) 註解為 {id} 提供值。
  • 當註解的path為全路徑時(可能和baseUrl不是一個域),會直接使用註解的path的域。

示例:

public interface BlogService{
    @GET("http://www.csdn.net/blog/{id}")
    Call<ResponseBody> getBlog(@Path("id") int id);
}

[email protected]

  • 可用於替代以上 7 個,及其他擴充套件方法;
  • 有 3 個屬性:method、path、hasBody。

例如:

    @HTTP(method = "get", path = "blog/{id}", hasBody = false)
    Call<ResponseBody> getBlog(@Path("id") int id);

三.引數類

1.Headers

作用於方法(即寫在方法的上面),用於新增請求頭。

2.Header

作用於引數(即寫在引數前),用於新增不固定的 Header。

3.Body

非表單請求體,例如在多個引數時可以封裝到一個Model中,@Body作用於此Model。

4.Field

表單欄位,@Field主要用於Post請求資料。FormUrlEncoded (下文介紹)配合。如果不新增@FormUrlEncoded
會報錯:@Field parameters can only be used with form encoding。

5.FieldMap

表單欄位,與FormUrlEncoded 配合;接受 Map<String, String> 型別,非 String 型別會呼叫
toString() 方法。

6.Part

表單欄位,適合檔案上傳情況。

7.PartMap

表單欄位,適合檔案上傳情況;預設接受 Map<String, RequestBody> 型別,非 RequestBody 會通過
Converter 轉換。

8.Path

用於給請求url中佔位符賦值。使用@Path時,path對應的路徑不能包含”/”,否則會將其轉化為%2F。

9.Query

主要用於Get請求資料,用於拼接在拼接在Url路徑後面的查詢引數,一個@Query相當於拼接一個引數,多個引數中間用,隔開。 示例:

@GET("api/ask/all_questions") 
Call<List<Repo>> getData(@Query("page") int page, @Query("is_reward") int is_reward);
}

10.QueryMap

主要用於Get請求資料,用於拼接在拼接在Url路徑後面的查詢引數。

11.Url

@Url是動態的Url請求資料的註解。 示例:

@GET 
Call<List<Repo>> getData(@Url String user);

注意事項:

  1. 如果請求為post實現,那麼最好傳遞引數時使用@Field、@FieldMap和@FormUrlEncoded。因為@Query和或QueryMap都是將引數拼接在url後面的,而@Field或@FieldMap傳遞的引數時放在請求體的。
  2. 使用@Path時,path對應的路徑不能包含”/”,否則會將其轉化為%2F。在遇到想動態的拼接多節url時,還是使用@Url吧。
  3. @Body標籤不能同時和@FormUrlEncoded、@Multipart標籤同時使用。否則會報錯:@Body parameters cannot be used with form or multi-part encoding.

四.標記類

1.FormUrlEncoded

請求體是 From 表單。
post請求中使用@Field和@FieldMap時要新增此註解,否則會丟擲Java.lang.IllegalArgumentException:
@Field parameters can only be used with form encoding. 的錯誤。

2.Multipart

請求體是支援檔案上傳的 From 表單。

3.Streaming

響應體的資料用流的形式返回。未使用該註解,預設會把資料全部載入記憶體,之後通過流獲取資料也是讀取記憶體中資料,所以返回資料較大時,需要使用該註解。

傳送另一篇:Retrofit 請求失敗問題填坑記錄
在這裡插入圖片描述