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里处理了。

                                                            个人浅见,欢迎批评!

    原文作者:hyperhao
    原文地址: https://www.jianshu.com/p/a804debf821e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞