Retrofit 2.0全部注解及注意事项

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cui130/article/details/85324014

在这里插入图片描述

一.导图

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);
}

2.@HTTP

  • 可用于替代以上 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() 方法。

扫描二维码关注公众号,回复: 4711122 查看本文章

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 请求失败问题填坑记录
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cui130/article/details/85324014
今日推荐