我有一个 WS,如果成功,它会返回 200,但没有正文 或 420 错误正文中包含 json 不成功
返回类型为
Observable<Response<Void>>
由于某种原因,如果出现 420 代码错误 onNext(Response<Void> value)
被调用而不是 onError(Throwable e)
任何其他不成功的请求都会调用它。
为什么只在这种情况下调用onNext而不是onError?如果请求没有返回200,是否可以调用onError?
最佳答案
这正是使用 Response
时的预期行为,任何类型的状态码都封装为 Response
对象,并用 onNext()
发出。而任何其他异常(网络错误/解析错误/其他一些配置错误)都将作为 onError()
中的异常传递。
使用裸对象方法( Observable<T>
/Observable<Void>
),除了从服务器获得响应并且响应已成功解析之外的任何其他情况,您将获得 onError()
。
如果是 RxJava2,Observable<Void>
不再有效,因为无法发出 null(RxJava2 不再允许),您应该使用 Completable
.
与 Response
,您可以包装一个错误处理程序,例如针对特定服务器错误代码。 (你可以在我的回答 here 中看到一个例子)
此外,还有Result
封装任何错误类型和 Response
的类型如果有的话。
关于android - 使用 Retrofit2 和 rxJava2 处理没有主体的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44200683/