博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Retrofit2.0中注解使用方式
阅读量:6267 次
发布时间:2019-06-22

本文共 2515 字,大约阅读时间需要 8 分钟。

之前有讲过Retrofit2.0的简单使用和解析。最近在做Retrofit替换之前使用的AsyncHttpClient,在替换的过程中遇到一些之前忽视的小细节。自己感觉知道这几点在开发中灵活使用Retrofit非常有好处。

说说Retrofit中的注解

@Query,@QueryMap,@Field,@FieldMap,@FormUrlEncoded,@Path,@Url 这七种注解应该是最常用的了。

下边列举各种应用场景。

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

Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build();public interface GitHubService {    //无参数    @GET("users/stven0king/repos")    Call
> listRepos(); //少数参数 @GET("users/stven0king/repos") Call
> listRepos(@Query("time") long time); //参数较多 @GET("users/stven0king/repos") Call
> listRepos(@QueryMap Map
params);}

 

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

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

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

Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build()public interface GitHubService {    //无参数    @POST("users/stven0king/repos")    Call
> listRepos(); //少数参数 @FormUrlEncoded @POST("users/stven0king/repos") Call
> listRepos(@Field("time") long time); //参数较多 @FormUrlEncoded @POST("users/stven0king/repos") Call
> listRepos(@FieldMap Map
params);}

@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 = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build()public interface GitHubService {  @GET("users/{user}/repos")  Call
> listRepos(@Path("user") String user);}

四、动态的url地址请求

 
Retrofit retrofit = new Retrofit.Builder()    .baseUrl("https://api.github.com/")    .build()public interface GitHubService {  @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吧。
 

转载于:https://www.cnblogs.com/peitong/p/5981207.html

你可能感兴趣的文章
5.Azure负载均衡(上)
查看>>
轻松精通awk数组企业问题案例
查看>>
26.Azure备份服务器(下)
查看>>
从“网上说的能信么”说开去---学习的思考
查看>>
DHCP 日志分析
查看>>
.NET Micro Framework动态调用C/C++底层代码(原理篇)
查看>>
Windows Server 2012正式版RDS系列⒃
查看>>
Shell脚本之awk篇
查看>>
微软发布Azure Stack硬件需求
查看>>
python socket编程详细介绍
查看>>
Windows Server 2016第三个技术预览版新技术
查看>>
Everything 本地磁盘文件搜索工具下载!
查看>>
Python dict(字典) 详细总结
查看>>
RPF(Reverse Path Forwarding 反向路径转发)技术
查看>>
2016年收到的第一件礼物,被评上微软全球最有价值专家MVP(一)
查看>>
2016中国VR开发者论坛第一期
查看>>
Hyper-V 2016 系列教程5 Hyper-V 服务器基本属性
查看>>
北京、天津工厂自动监测数据爬取
查看>>
第一个python程序简单加法计算器
查看>>
在CentOS下安装Tomcat8
查看>>