Retrofit 2.0全部註解及注意事項
文章目錄
- 一.導圖
- 二.請求方法類
- 三.引數類
- 1.Headers
- 2.Header
- 3.Body
- 4.Field
- 5.FieldMap
- 6.Part
- 7.PartMap
- 8.Path
- 9.Query
- 10.QueryMap
- 11.Url
- 注意事項:
- 四.標記類
一.導圖
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);
注意事項:
- 如果請求為post實現,那麼最好傳遞引數時使用@Field、@FieldMap和@FormUrlEncoded。因為@Query和或QueryMap都是將引數拼接在url後面的,而@Field或@FieldMap傳遞的引數時放在請求體的。
- 使用@Path時,path對應的路徑不能包含”/”,否則會將其轉化為%2F。在遇到想動態的拼接多節url時,還是使用@Url吧。
- @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 請求失敗問題填坑記錄