Retrofit請求引數註解欄位說明

yangxi_001發表於2016-11-28

@Query、@QueryMap

用於Http Get請求傳遞引數.如:

@GET("group/users")
Call<List<User>> groupList(@Query("id") int groupId);

等同於:

@GET("group/users?id=groupId")

即將@Querykey-value新增到url後面組成get方式的引數,@QueryMap同理

@Field

用於Post方式傳遞引數,需要在請求介面方法上新增@FormUrlEncoded,即以表單的方式傳遞引數.示例:

@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last);

@Body

用於Post,根據轉換方式將例項物件轉化為對應字串傳遞引數.比如Retrofit新增GsonConverterFactory則是將body轉化為gson字串進行傳遞. 
converter有如下:

Gson: com.squareup.retrofit2:converter-gson 
Jackson: com.squareup.retrofit2:converter-jackson 
Moshi: com.squareup.retrofit2:converter-moshi 
Protobuf: com.squareup.retrofit2:converter-protobuf 
Wire: com.squareup.retrofit2:converter-wire 
Simple XML: com.squareup.retrofit2:converter-simplexml

@Path

用於URL上佔位符.如:

@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId);

將groupId變數的值替換到url上的id位置

@Part

配合@Multipart使用,一般用於檔案上傳,看官方文件示例:

@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);

新增http header

@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

等同於:

@Headers("Authorization: authorization")//這裡authorization就是上面方法裡傳進來變數的值
@GET("widget/list")
Call<User> getUser()

@Headers

@Header作用一樣,只是使用方式不一樣,@Header是作為請求方法的引數傳入,@Headers是以固定方式直接新增到請求方法上.示例:

@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();

多個設定:

@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("widget/list")
Call<List<Widget>> widgetList();

相關文章