美文网首页
Rx+retrofit 如何优雅的获取非200返回内容(三行代码

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

作者: Sand哥 | 来源:发表于2019-11-06 19:54 被阅读0次

    正常情况下,服务器返回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返回内容(三行代码

          本文链接:https://www.haomeiwen.com/subject/rmrpbctx.html