[英]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.