美文网首页
Retrofit2.0中注解使用套路

Retrofit2.0中注解使用套路

作者: 静默加载 | 来源:发表于2016-08-30 17:16 被阅读5067次

个人博客地址 http://dandanlove.com/

之前有讲过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<List<Repo>> listRepos();
    //少数参数
    @GET("users/stven0king/repos")
    Call<List<Repo>> listRepos(@Query("time") long time);
    //参数较多
    @GET("users/stven0king/repos")
    Call<List<Repo>> listRepos(@QueryMap Map<String, String> 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<List<Repo>> listRepos();
    //少数参数
    @FormUrlEncoded
    @POST("users/stven0king/repos")
    Call<List<Repo>> listRepos(@Field("time") long time);
    //参数较多
    @FormUrlEncoded
    @POST("users/stven0king/repos")
    Call<List<Repo>> listRepos(@FieldMap Map<String, String> 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<List<Repo>> listRepos(@Path("user") String user);
}

四、动态的url地址请求

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .build()
    
public interface GitHubService {
  @GET
  Call<List<Repo>> listRepos(@Url String user);
}

五、总结小细节

  • 当@GET或@POST注解的url为全路径时(可能和baseUrl不是一个域),会直接使用注解的url的域。
  • 如果请求为post实现,那么最好传递参数时使用@Field、@FieldMap和@FormUrlEncoded。因为@Query和或QueryMap都是将参数拼接在url后面的,而@Field或@FieldMap传递的参数时放在请求体的。
  • 使用@Path时,path对应的路径不能包含"/",否则会将其转化为%2F。在遇到想动态的拼接多节url时,还是使用@Url吧。

想阅读作者的更多文章,可以查看我 个人博客 和公共号:

振兴书城

相关文章

  • Retrofit2.0中注解使用套路

    个人博客地址 http://dandanlove.com/ 之前有讲过Retrofit2.0的简单使用和解析。最近...

  • Retrofit2的使用

    不怕跌倒,所以飞翔 参考文献:Retrofit2.0使用详解Retrofit 2.0 注解篇 1.Retrofit...

  • Retrofit2.0项目中实践

    前言 项目中开始使用retrofit2.0作为网络框架,注解的形式使用起来确实简洁。2.0版本相比之前有了比较大的...

  • Spring讲解(四)

    Spring 中使用注解注入 注解:就是一个类,使用 @ 注解名称。实际开发中:使用注解取代 xml 配置文件。 ...

  • Retrofit2.0 注解简介

    1.注解简介 Retrofit2.0是在okhttp的基础上进行封装的,网络请求是通过okhttp实现的。Retr...

  • Retrofit通过ParameterHandler给Reque

    Retrofit2.0通过注解来配置请求的方式,比如请求的类型,Header,参数等等。通过动态代理的方式来解释注...

  • Android测试系列-Junit(三)

    目录 注解简介 执行过程注解的使用 其他注解的使用 注解简介 JUnit包中包含了一些注解的使用,其中有以下一些注...

  • 6、注解篇@SessionAttributes

    @SessionAttributes 该注解使用在类注解上 该注解使用再与将request中存在的值共享到sess...

  • Kotlin注解(2)自定义注解

    声明注解案例:使用元注解注解目标声明案例:读取运行时注解信息   与基本注解不同,在一般的应用开发中不会直接使用元...

  • 实现自定义校验注解,ConstraintValidator接口

    一、Spring中的校验注解 在spring的使用过程中,有一些现成的注解可以使用 二、自定义注解 该自定义注解类...

网友评论

      本文标题:Retrofit2.0中注解使用套路

      本文链接:https://www.haomeiwen.com/subject/cgwfettx.html