我有一个WS,如果成功则返回200而没有身体 错误体中的json或者420的json是不成功的
返回类型是
Observable<Response<Void>>
出于某种原因,如果出现错误,则会调用420代码onNext(Response<Void> value)
,而不是onError(Throwable e)
,而其他任何不成功的请求都会被调用。
为什么只在这种情况下调用onNext而不是onError?如果请求没有返回200?
,则可以调用onError答案 0 :(得分:4)
这正是使用Response
时的预期行为,任何类型的状态代码都封装为Response
对象,并随onNext()
一起发出。任何其他异常(网络错误/解析错误/一些其他配置错误)将在onError()
中作为异常传递。
使用裸对象apprach(Observable<T>
/ Observable<Void>
),除了从服务器获得响应以及响应被成功解析之外的任何其他情况,您将获得onError()
。
在RxJava2的情况下,Observable<Void>
不再有效,因为无法发出null(RxJava2不再允许),而是应该使用Completable
。
使用Response
,您可以为特定服务器错误代码包装一个错误处理程序。 (你可以在我的回答中看到一个例子here)
此外,还有Result
类型封装任何错误类型和Response
(如果有)。