正常情况下,服务器返回200,retrofit 可以正常解析到数据
但是有些服务器开发的二哥当业务出错的时候,http response code返回了非200,但是数据基本结构没有变化,只是少了data内容,这会导致rx调用结果直接到了onError 里面了,这样虽然能在onError里得到throwable对象中得到errorbody,然后再转换一次,但是不太优雅,网上大不部分解决方案是这个,这里说一下我的思路,我觉得更简单
比如正常情况下返回数据是这样的,http response code 200,返回的数据如下
{
"code":0
"message":"success",
"data":{}
}
当出现错误时,比如参数传错了,此时http response code 是其他的比如400
{
"code":2010
"message":"参数错误",
}
其实就是没有data内容,结构不变,解决方法如下,
实现一个Interceptor子类(当然你要在okhttp初始化的时候,把这个Interceptor传进去,而且我相信大多数项目中都至少会有一个Intercepter,你要做的就是在你Intercepotr中加3行代码),在intercept方法中拿到response对象(response = chain.proceed(request);就是这个玩意) 利用反射将response 的code 设置为200,核心就三行代码。
//处理非200的情况
Field codeFiled = response.getClass().getDeclaredField("code");
codeFiled.setAccessible(true);
codeFiled.set(response,200);
然后正常返回response。一切就OK了