在使用retrofit
过程中,通常,如果服务器返回我们的一个response
。
大至如下
{
"code":200,
"msg":"success",
"result":"result"
}
在result
中是我们请求需要的数据,所以在写apis
的时候可以写成
Call<Response<Result>> getResult(Requset request);
这里的Result
根据实际需求来获得,如果是这种情况的话就比较简单.
但是如果服务器返回的result
字段的值是加密过的,那么这时候就无法直接解析了,我现在能想到的方法是给okhttp
添加拦截器,直接修改返回的数据里面的字段(但是我还不知道具体怎样做),现在觉得我的思路不太好,想请问下有什么办法可以好一点的解决,自定义一个ConverterFactory
?
谢谢,我想这种情况应该也不算少见,所以就来请教一下各位大神.谢谢
Retrofit自定义数据协议步骤:
自定义
Converter.Factory
, 参考retrofit2.converter.gson.GsonConverterFactory
调用
Retrofit.Builder#addConverterFactory(Converter.Factory)
除此之外, 调用方式也可以自定义, 目前比较流行使用的是Retrofit+RxJava(RxAndroid), 步骤如下:
自定义
CallAdapter.Factory
, 参考retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
调用
Retrofit.Builder#addCallAdapterFactory(CallAdapter.Factory)
一般 Result里会用泛型T 代表从服务器实际返回的实体,可以如你所说先用拦截器对结果 解码,然后直接gson解析即可