Retrofit2 + RxJavaを使用しています。私はリクエストサーバーが2つの応答Succesとエラーのいずれかを返すことができますが、どちらの場合もHTTP STATUS CODE = 200です。レスポンスボディでErronを取得すると、onEextを呼び出す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);
大成功応答(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ステータスコードは、応答がOKであることを示します。この問題はリクエストの本文と関連している可能性があります。 –
成功とエラー応答の両方でHTTP 200を受信した場合、Retrofitでは自動的にエラーが発生しません。 Retrofitに関する限り、その要求は成功した。返されたものを分析し、適切に処理する必要があります。たとえば、同じ基本クラスを拡張し、共通の 'isError'フラグを持つCreateAuthとErrorResponseの両方を持つ必要があります。または、エラー時に4xx応答を戻すようにエンドポイントを再構成します。 –
@MichaelDodd、このような状況に対処できるインターセプタを書く方法はありますか? –