即使http状态代码不是200,如何继续从REST API获取响应数据?

时间:2016-07-05 18:28:09

标签: rx-java retrofit2 rx-android

我正在使用改造2.0.2和okhttp3来构建我的应用程序。如果服务器代码有任何逻辑错误,我的服务器将http状态代码设置为418。像密码不匹配。响应数据是{“statuscode”:500}。 500表示密码不匹配。当okhttp3获取非200 http状态代码时,我不知道如何读取响应数据。当它获得418时,改造会抛出异常。

我的问题是即使http状态代码不是200,如何读取响应数据。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

我假设您将来电定义为:

Observable<YourModel> doStuff();

对于HTTP错误代码,网络错误,解析错误,您会收到HTTP代码200-300和onSuccess的{​​{1}}回调...

您还可以将通话定义为:

onError

当出现HTTP错误时,您将收到Observable<Response<YourModel>> doStuff(); 的电话。

onSuccess中,您需要检查onSuccess。对于200-300个状态代码,它返回true,您可以使用response.isSuccess()

访问响应正文

如果response.body()返回false,您可以使用以下命令将错误正文转换为模型类:

response.isSuccess()