繁体   English   中英

使用Retrofit2和rxJava2处理没有主体的响应

[英]Handling response with no body with Retrofit2 and rxJava2

我有一个WS,如果成功返回WS,则没有任何正文,如果没有成功,则返回420,而错误正文中的JSON为420,则失败

返回类型为

Observable<Response<Void>>

出于某种原因,在420代码出错的情况下,将onNext(Response<Void> value)而不是onError(Throwable e) ,后者将针对其他任何不成功的请求进行调用。

为什么仅在这种情况下才调用onNext而不是onError? 如果请求未返回200,则可以调用onError?

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

使用裸对象方法( Observable<T> / Observable<Void> ),对于从服务器获取响应和成功解析响应以外的任何其他情况,您将获得onError()

如果是RxJava2,则Observable<Void>不再有效,因为不能发出null(RxJava2不再允许),而应使用Completable

使用Response ,您可以包装一个Error处理程序,例如用于特定的服务器错误代码。 (你可以在我的答案看到一个例子在这里

另外,还有封装任何错误类型的Result类型和一个Response如果有)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM