Retrofit中的注解

@Query,@QueryMap,@Field,@FieldMap,@FormUrlEncoded,@Path,@Url

这七种注解应该是最常用的了。

下边列举各种应用场景。

一、get方式请求静态url地址

Retrofit retrofit =newRetrofit.Builder()

.baseUrl("https://api.github.com/")

.build();publicinterfaceGitHubService {//无参数@GET("users/stven0king/repos")

Call>listRepos();//少数参数@GET("users/stven0king/repos")

Call> listRepos(@Query("time")longtime);//参数较多@GET("users/stven0king/repos")

Call> listRepos(@QueryMap Mapparams);

}

@Query和@QueryMap也可以结合在一起使用。

要是对应的url在服务端支持get/post两种类型的请求的话,那么上面的@GET变为@POST也可以执行,只不过post请求时所带的参数也会像get方式一样已?key=value&key1=vaule2…的形式拼接在url的后边。

二、post方式请求静态url地址

Retrofit retrofit =newRetrofit.Builder()

.baseUrl("https://api.github.com/")

.build()publicinterfaceGitHubService {//无参数@POST("users/stven0king/repos")

Call>listRepos();//少数参数@FormUrlEncoded

@POST("users/stven0king/repos")

Call> listRepos(@Field("time")longtime);//参数较多@FormUrlEncoded

@POST("users/stven0king/repos")

Call> listRepos(@FieldMap Mapparams);

}

@Field和@FieldMap可以结合在一起使用。

另外是不是发现了比起@GET多了一个@FromUrlEncoded的注解。如果去掉@FromUrlEncoded在post请求中使用@Field和@FieldMap,那么程序会抛出java.lang.IllegalArgumentException: @Field parameters can only be used with form encoding. (parameter #1)的错误异常。如果将@FromUrlEncoded添加在@GET上面呢,同样的也会抛出java.lang.IllegalArgumentException:FormUrlEncoded can only be specified on HTTP methods with request body (e.g., @POST).的错误异常

三、半静态的url地址请求

Retrofit retrofit =newRetrofit.Builder()

.baseUrl("https://api.github.com/")

.build()publicinterfaceGitHubService {

@GET("users/{user}/repos")

Call> listRepos(@Path("user") String user);

}

四、动态的url地址请求

Retrofit retrofit =newRetrofit.Builder()

.baseUrl("https://api.github.com/")

.build()publicinterfaceGitHubService {

@GET

Call>listRepos(@Url String user);

}

五、总结小细节

当@GET或@POST注解的url为全路径时(可能和baseUrl不是一个域),会直接使用注解的url的域。

如果请求为post实现,那么最好传递参数时使用@Field、@FieldMap和@FormUrlEncoded。因为@Query和或QueryMap都是将参数拼接在url后面的,而@Field或@FieldMap传递的参数时放在请求体的。

使用@Path时,path对应的路径不能包含”/”,否则会将其转化为%2F。在遇到想动态的拼接多节url时,还是使用@Url吧。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • 安卓开发领域中,很多重要的问题都有很好的开源解决方案,例如Square公司提供网络请求 OkHttp , Retr...
    aaron688阅读 1,928评论 1 20
  • 开源框架地址:https://github.com/square/retrofit 英文文档官网:http://s...
    于加泽阅读 517评论 0 0
  • Retrofit--相信大家都或多或少的听过和用过了,不知道是什么的证明你已经out了~我使用和研究Retrofi...
    zyyoona7阅读 3,606评论 9 36
  • 年轻人人都有,或许会经历一些青涩不完美的爱情,当回过头去品味时,它那样单纯像没着色的画,如同记忆里的黑白照片,承载...
    相信彩虹阅读 689评论 3 5