使用Retrofit2和rxJava2处理没有正文的响应

时间:2017-05-26 11:38:53

标签: android retrofit rx-java retrofit2 rx-java2

我有一个WS,如果成功则返回200而没有身体 错误体中的json或者420的json是不成功的

返回类型是

Observable<Response<Void>>

出于某种原因,如果出现错误,则会调用420代码onNext(Response<Void> value),而不是onError(Throwable e),而其他任何不成功的请求都会被调用。

为什么只在这种情况下调用onNext而不是onError?如果请求没有返回200?

,则可以调用onError

1 个答案:

答案 0 :(得分:4)

这正是使用Response时的预期行为,任何类型的状态代码都封装为Response对象,并随onNext()一起发出。任何其他异常(网络错误/解析错误/一些其他配置错误)将在onError()中作为异常传递。

使用裸对象apprach(Observable<T> / Observable<Void>),除了从服务器获得响应以及响应被成功解析之外的任何其他情况,您将获得onError()

在RxJava2的情况下,Observable<Void>不再有效,因为无法发出null(RxJava2不再允许),而是应该使用Completable

使用Response,您可以为特定服务器错误代码包装一个错误处理程序。 (你可以在我的回答中看到一个例子here

此外,还有Result类型封装任何错误类型和Response(如果有)。