Retrofit 注解使用

来源:互联网 发布:avast网络安全软件 编辑:程序博客网 时间:2024/05/22 09:44

method annotation 方法注解

@GET @POST @Multipart @FormUrlEncoded @Headers (@PUT/@DELETE/@PATCH/@HEAD 不经常使用所以省略)

  1. @Get
    ① 不可以搭配 @FormUrlEncoded 和 @Multipart

    ②可以搭配@Headers

  2. @POST

    ① @FormUrlEncoded (普通表单上传) / @POST 搭配 @Multipart(带有文件上传)

    ②可以搭配@Headers

method parameter annotation 方法参数注解

参数注解包含如下:
@Url() @Path @query @queryName @QueryMap @Header @HeaderMap @Field @FieldMap @Part @PartMap @Body

  1. @Url

    ① 支持 @POST @GET

    ② 一个方法中最多有一个@Url注解

    ③ 方法中不能和@Path 同时使用 , 方法中同时使用@Query 参数必须在@Url之后

    ④ 如果方法引用了@GET 或者 @POST,并且 @GET @POST 括号中的值不为 null ,同样不能使用@Url

    ⑤ @Url支持的传递参数类型:HttpUrl/String/URI 类型

    示例:

@POSTCall<List<Contributor>> getTutorials(@Url String url);
  1. @Path

    ① 支持 @POST @GET

    ② 方法中不能和@Url同时使用 , 方法中同时使用@Query 参数必须在@Path 之后,@GET @POST中必须声明相对路径

    ③ @Path括号中的值必须已经存在@GET 或者 @POST括号声明的相对路径中

    示例:

@GET("/repos/{owner}/{repo}/contributors")Call<List<Contributor>> contributors(@Path("owner") String owner,@Path("repo") String repo);

contributor(“doudou”,”xxxx”) 结果 : /repos/doudou/xxxx/contributors

3.1 @Query

① 支持 @POST @GET

② 方法传入参数类型可以为 Iterable、数组、Object(一般Integer, Stirng)

③ 如果传递的value值为null,则 不会添加到相对路径中

示例:

@POSTCall<List<Contributor>> getTutorials(@Url String url,@Query("page") Integer page,@Query("order") String order,@Query("author") String author);

getTutorials(“/getlist”,1,null,”逗逗”)则路径为:/getlist?page=1&author=”逗逗”

3.2 @QueryName

① 支持 @POST @GET

② 方法传入参数类型可以为 Iterable、数组、Object(一般Integer, Stirng)

示例:

@POSTCall<List<Contributor>> getTutorials(@Url String url,@QueryName String author);

getTutorials(“/getlist”,”doudou”)则路径为:/getlist?doudou

3.3 @QueryMap

① 支持 @POST @GET

② map值中存储的键值对value不能为null,否则报错

示例:

@POST("/getlist")Call<List<Contributor>> getTutorials(@Url String url,@QueryMap HashMap<String,String> map);
HashMap<String, String> maps = new HashMap<>();maps.put("username", "jack");maps.put("password", "123456");getTutorials("/getlist",maps)则路径为:/getlist?username=jack&password=123456

4.1 @Header

① 支持 @POST @GET

② 具有相同名称的key不会相互覆盖,而是会照样添加到请求头中

③ value为null 不会添加到Header中

④ 如果 key 为 Content-Type 需要特殊注意:http://www.w3school.com.cn/media/media_mimeref.asp 查看支持类型

示例:

@Headers({* "X-Foo: Bar",* "X-Ping: Pong"* })@POST("/getlist")Call<List<Contributor>> getTutorials(@Header("test") String header,@QueryMap HashMap<String, String> map);

通过遍历Headers 结果如下:

11-29 11:44:12.104 12315-12315/com.myapplication E/xxx: X-Foo = Bar11-29 11:44:12.104 12315-12315/com.myapplication E/xxx: X-Ping = Pong11-29 11:44:12.104 12315-12315/com.myapplication E/xxx: Y-Foo = Bar11-29 11:44:12.104 12315-12315/com.myapplication E/xxx: Y-Ping = Pong

4.2 @HeadMap

① 支持 @POST @GET

② 具有相同名称的key不会相互覆盖,而是会照样添加到请求头中

③ @HeaderMap 中存储的任何一个key的value都不能为null,否则报错

5.1 @Field

① 支持 @POST

② 使用该注解必须声明 @FormUrlEncoded ,同时@FormUrlEncoded 也要求方法参数必须有@Field或者@FieldMap ,两者相互依赖,缺一不可

示例:

@FormUrlEncoded@POST("user")Call<Contributor> update(@Field("username") String username, @Field("name") String name);

5.2 @FieldMap

① 支持 @POST

② 使用该注解必须声明 @FormUrlEncoded ,同时@FormUrlEncoded 也要求方法参数必须有@Field或者@FieldMap ,两者相互依赖,缺一不可

③ map中存储的value值不能为null

示例:

@FormUrlEncoded@POST("user")Call<Contributor> update(@FieldMap HashMap<String,String> username);

6.1 @Part

① 支持 @POST

② 使用该注解必须声明 @Multipart ,同时@Multipart 也要求方法参数必须有@Part或者@PartMap,两者相互依赖,缺一不可

示例:

@Multipart@POST("user")Call<Contributor> delete(@Part String username, @Part("name") String name);

6.2 @PartMap

① 支持 @POST

② 使用该注解必须声明 @Multipart ,同时@Multipart 也要求方法参数必须有@Part或者@PartMap,两者相互依赖,缺一不可

③ map中存储的value值不能为null

  1. @Body

    ① 支持 @POST

    ②该参数不能和 @FormUrlEncoded @Multipart 注解同时使用,那么 @Field @FieldMap @Part @PartMap 当然也就不能同时使用了

    示例:

 realNameAuth(@Body RequestBody params);
原创粉丝点击