Retrofit 自定义Converter解密网络请求新套路

使用retrofit处理网络请求时,通常解析的结果是通过GsonConverterFactory或者是其他的Jackson之类的解析器来处理Json对象的解析。遇到需要解密的时候,先看返回的数据:

{"retCode":200,"retDesc":"Success","ret":xxxxxx}

    ret里存放的是加密过的数据。

两种套路:

一. 自定义Converter

.addConverterFactory(MyConverterFactory.create())

通常可以处理将所有的请求的返回全部进行解密,如果我们要根据请求去判断是否解密,因为在Converter里无法获取到Reqest和Response对象,所有如何判断这个接口请求是否需要解密结果是个问题。

二.将对象解析成json后处理加密的ret

结合RxJava使用map转换。


使用注解

public interface GitHubService {

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

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

 }

Retrofit构造请求时,使用了注解@GET,再看看Converter里的代码

发现参数里返回里传了annotations数组,所以,遍历它吧,里面包含了所有你写请求时加的注解

@Override 

public Converter responseBodyConverter(Type type, Annotation[] annotations, Retrofitretrofit) { 

    boolean encryt = false;  

    for (int i = 0; i < annotations.length; i++) {   

        if (annotations[i].annotationType().toString().equals(ENCRYT.class.toString())) {       

            encryt = true;     

        }    

     }   

return new MyResponseBodyConverter<>(gson, type, encryt);

}

自定义一个注解@XXX,请求时写上标记你的请求类型,加密。

然后你就可以在Converter里处理了。

                                                            个人浅见,欢迎批评!

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139
  • 简介 刚接触Retrofit的时候,就写了一篇简单的使用介绍:Retrofit 2.0基本使用方法,算是对Retr...
    Whyn阅读 2,887评论 4 24
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,584评论 1 92
  • 本文将顺着构建请求对象->构建请求接口->发起同步/异步请求的流程,分析Retrofit是如何实现的。 开始之前,...
    zhuhf阅读 1,640评论 0 10
  • 我不是你最早的一批粉丝,不是最痴的迷妹。我只是那个单纯尊敬崇拜你的胡椒。 初始惊艳已沦陷 当我...
    杳_阅读 440评论 4 7