retrofit2.Converter用于处理错误消息

时间:2017-09-21 10:11:16

标签: android retrofit2 gson

有没有办法在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()));
    }
}

1 个答案:

答案 0 :(得分:0)

最后我发现了产生这个错误的原因。它是 HttpLoggingInterceptor 。删除后不再有EOFException。