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,有什麼辦法可以編寫攔截器來處理這種情況嗎? –