Rx+retrofit 如何优雅的获取非200返回内容(三行代码)

正常情况下,服务器返回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了

你可能感兴趣的:(Rx+retrofit 如何优雅的获取非200返回内容(三行代码))