Retrofit 2.0包含众多的注解,包括
方法注解,包含@GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。
标记注解,包含@FormUrlEncoded、@Multipart、@Streaming。
参数注解,包含@Query,@QueryMap、@Body、@Field,@FieldMap、@Part,@PartMap。
其他注解,@Path、@Header,@Headers、@Url
1.@Path:URL占位符,用于替换和动态更新,相应的参数必须使用相同的字符串被@Path进行注释
@GET("group/{id}/users")
Call> groupList(@Path("id") int groupId);
@Query,@QueryMap:查询参数,用于GET查询,需要注意的是@QueryMap可以约定是否需要encode
@GET("group/{id}/users")
Call> groupList(@Path("id") int groupId, @Query("sort") String sort);
@GET("group/{id}/users")
Call> groupList(@Path("id") int groupId, @QueryMap Map options);
@Query也可以用于@Post
@Field,@FieldMap:Post方式传递简单的键值对,需要添加@FormUrlEncoded表示表单提交
Content-Type:application/x-www-form-urlencoded
当函数有@FormUrlEncoded
注解的时候,将会发送form-encoded
数据,每个键-值对都要被含有名字的@Field
注解和提供值的对象所标注
@FormUrlEncoded
@POST("user/edit")
Call updateUser(@Field("first_name") String first, @Field("last_name") String last);
@PUT是方法注解,稍后会统一说明
@Part,@PartMap:用于POST文件上传
其中@Part MultipartBody.Part代表文件,@Part("key") RequestBody代表参数
需要添加@Multipart表示支持文件上传的表单,Content-Type: multipart/form-data
当函数有@Multipart
注解的时候,将会发送multipart
数据,Parts都使用@Part
注解进行声明
Multipart parts要使用Retrofit的众多转换器之一或者实现RequestBody
来处理自己的序列化
@Multipart
@PUT("user/photo")
Call updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description);
@Body
@POST("users/new")
Call createUser(@Body User user);
4.@Headers @Header 方法注解@HEAD
@HEAD是方法注解,与参数注解@Header不同,下面会统一说明。
@Header:header处理,不能被互相覆盖,用于修饰参数,在参数中的@Header可以作为@Headers的增项使用
//动态设置Header值
@GET("user")
Call getUser(@Header("Authorization") String authorization)
//静态设置Header值
@Headers("Authorization: authorization")//这里authorization就是上面方法里传进来变量的值
@GET("widget/list")
Call getUser()
@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call getUser(@Path("username") String username);
@GET
Call> repoContributorsPaginate(@Url String url);
http://kb.cnblogs.com/page/512047/