1
我正在使用Retrofit2 + RxJava。当我让请求服务器可以返回两个响应成功和错误之一,但在这两种情况下,HTTP状态代码= 200.如何实现,当我在响应身体Erron而不是调用onNext调用onError?Retrofit2错误处理
Observable<CreateAuth> createAuthObservable = endApiServiceProvider.createAuth(phone);
Subscription subscription = createAuthObservable
.observeOn(AndroidSchedulers.mainThread())
.subscribe(createAuth -> {
hideProgress();
successAuth(phone);
},
throwable -> {
//todo correct handle error
hideProgress();
if (throwable instanceof IOException) {
showError("Network error. Please check your internet connection");
}
});
我的端点接口
@GET("/api/new.php")
Observable<CreateAuth> createAuth(@Query("username") String uname);
SUCCES响应(HTTP代码200)和CreateAuth.java POJO结构如下
{
"val": true,
"message": "Success!"
}
错误响应(HTTP代码200)和ErrorResponse.java POJO结构如下
{
"error_type": "wrong_c",
"error_additional": "Illegal char in name!"
}
Mann,200状态码表示响应正常。这个问题可能与请求主体有关。 –
如果您收到成功和错误响应的HTTP 200,那么这不会在Retrofit中自动抛出错误。就Retrofit而言,这项要求是成功的。您需要分析返回的内容并对其进行适当的处理,例如,CreateAuth和ErrorResponse都扩展了相同的基类并具有一个共同的“isError”标志。或者,重新配置您的端点以在错误时返回4xx响应。 –
@MichaelDodd,有什么办法可以编写拦截器来处理这种情况吗? –