有没有办法在Retrofit转换器上实现处理40x错误的正文?
每次返回和EOFException时,我都会遇到来自服务器的响应有问题,这些响应包含40x代码和空体消息。
我已经实现了转换器但是当它有40x错误时它不会通过它。
改造:
delegate
这是我处理来自服务器调用的错误的地方:
Gson gson = new GsonBuilder().create();
Retrofit.Builder builder = new Retrofit.Builder()
.addConverterFactory(new NullOnEmptyConverterFactory())
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.baseUrl(url);
builder.client(okHttpClientBuilder.build());
单个服务器调用
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()));
}
}
答案 0 :(得分:0)
最后我发现了产生这个错误的原因。它是 HttpLoggingInterceptor 。删除后不再有EOFException。