40xエラーの本体を処理するために、Retrofit Converterに実装する方法はありますか?retrofit2.エラーメッセージを処理するコンバータ
40xコードと空の本文メッセージが返され、EOFExceptionが返されるたびに、サーバーからの応答に問題があります。
私はConverterを実装しましたが、40倍のエラーが発生した場合、それは通過しません。
改修:
public static <T> ObservableTransformer<T, T> parseHttpErrors() {
return observable -> observable.onErrorResumeNext(
(Throwable throwable) -> {
if (throwable instanceof HttpException) {
int errorCode = ((HttpException) throwable).response().code();
return validateHttpExceptions(throwable, errorCode);
} else if (throwable instanceof IOException) {
return Observable.error(new NetworkException());
}
return Observable.error(throwable);
});
}
private static <T> ObservableSource<? extends T> validateHttpExceptions(Throwable throwable, int errorCode) {
switch (errorCode) {
case 401:// Request Unauthorized
return Observable.error(new CredentialsException());
case 408:// Request Timeout
return Observable.error(new NetworkException());
default:
return Observable.error(new UnknownHttpException(errorCode, throwable.getMessage()));
}
}
そして、単一のサーバー呼び出し
service.doAction(params)
.subscribeOn(Schedulers.io())
.compose(NetworkErrorHandler.parseHttpErrors())
.map(data -> {
//map data
return data;
});
RxJavaを使用していますか? –
はい、私は、RxJava 2 –
これはこれを1つ:https://stackoverflow.com/questions/46295237/rxjava-retrofit-parse-api-error-for-user/46302070#46302070 –