Retrofit 请求参数注解说明

Retrofit是通过使用注解来简化请求的,下面就来看看Retrofit请求参数中用到的所有注解

Retrofit 注解主要分为三大类

  1. 请求方法类
  2. 标记类
  3. 参数类

请求方法类

首先Retrofit2.1.0版本中已经内置了下面8种注解方式:GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH、HTTP

HTTP

其中说一下HTTP请求,它可以替代其他7个注解

这个注解通的比较少,主要用于自定义注解时用到,Api文档的解释如下

Use a custom HTTP verb for a request.

它有三个属性:method、path、hasBody

最近正好用到它自定义了一个DELETE请求,用于支持传递Body注解参数,方法如下

1
2
@HTTP(method = "DELETE", path = "/api/v1/sync", hasBody = true)
Observable<Response<Object>> postSyncRemoveData(@Body SyncRemoveData syncData);

标记类

该类型的注解用于标注请求和响应的格式。

FormUrlEncoded

表示请求发送编码表单数据,每个键值对需要使用@Field注解

Multipart

表示请求发送multipart数据,需要配合使用@Part

Streaming

表示响应用字节流的形式返回.如果没使用该注解,默认会把数据全部载入到内存中.该注解在在下载大文件的特别有用

参数类

Body

用于post请求发送非表单数据,比如想要以post方式传递json格式数据,及传递一个model对象,retrofit会将其转化成json格式的对象,当然取决你addConverterFactory()采用的哪种方式了,converter有如下:Gson、Jackson、Moshi、Protobuf、Wire、Simple XML。示例代码如下:

1
2
@POST("/api/v1/users")
Observable<Response<TokenModel>> postUser(@Body Auth auth);

Field

表单字段,与 FieldMap、FormUrlEncoded 配合

FieldMap

表单字段,与 Field、FormUrlEncoded 配合;接受 Map 类型,非 String 类型会调用 toString() 方法,示例:

1
2
3
@FormUrlEncoded
@POST("api/v1/user")
Call<User> getUser(@FieldMap Map<String, String> options);

作为方法的参数传入,用于添加不固定值的Header,该注解会更新已有的请求头

1
2
@GET("api/v1/user")
Call<User> getUserInfo(@Header("token") token)

Headers

用于添加固定请求头,可以同时添加多个。通过该注解添加的请求头不会相互覆盖,而是共同存在示例:

1
2
3
4
5
6
@Headers({
"User-Agent:android"
"Cache-Control: max-age=64000"
})
@GET("api/v1/user")
Call<User> getUserInfo(@Header("token") token)

HeaderMap

与FieldMap类似

Part

表单字段,与 PartMap 配合,适合文件上传情况

PartMap

表单字段,与 Part 配合,适合文件上传情况;默认接受 Map 类型,非 RequestBody 会通过 Converter 转换

Path

作用于Url问号前面,占位符的作用

http://baseurl/api/v1/user/id

1
2
@GET("api/v1/user/{id}")
Call<User> getUser(@Path("id") int id);

Query

http://baseurl/api/v1/user?id=id

1
2
GET("api/v1/user")
Call<User> getUser(@Query("id") int id);

QueryMap

http://baseurl/api/v1/user?param1=Param1&param2=Param2

1
2
GET("api/v1/user")
Call<User> getUser(@QueryMap Map<String, String> options);

Url

指定请求路径,这个特别适用于动态设置url

1
2
GET("api/v1/user")
Call<User> getUser(@Url String url);

此请求将按照传递的url作为url请求

参考

http://square.github.io/retrofit/2.x/retrofit/
http://www.jianshu.com/p/0f97f94b171f?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io