如何只在Retrofit响应成功时添加GSON CallAdapter Factory

How to Add GSON CallAdapterFactory only when Retrofit Response is Succesfull

我有一个 REST 服务器,我的问题是每当我的响应不成功时,我想从响应正文中解析错误并将其显示给用户(将错误信息传递给调用 Activity)

@Named("rest_api")
@Singleton
@Provides
Interceptor provideRESTInterceptor(final UserManager userManager) {
    return new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request original = chain.request();
            String token = userManager.getJwt();

            Request request = original.newBuilder()
                    .header("Accept", "application/json")
                    .header("Authorization", "Bearer "+token)
                    .method(original.method(), original.body())
                    .build();

            Log.i(LOG_TAG, "REQUEST URL "+request.uri());
            Response response = chain.proceed(request);

            if(!response.isSuccessful()) {
                // How do i send this error to my Activity.

                APIError apiError = new APIError(response.code(),response.body().string());
            }

            // Customize or return the response
            return response;
        }
    };
}

我正在使用 RxJavaConverter

@Named("rest_api")
@Singleton
@Provides
Retrofit provideRESTRetrofit(@Named("rest_api")OkHttpClient client, Converter.Factory converter, CallAdapter.Factory rxJava) {
    return new Retrofit.Builder()
            .baseUrl(PUBLIC_PRODUCTION_URL)
            .client(client)
            .addCallAdapterFactory(rxJava)
            .addConverterFactory(converter)
            .build();
}

自 Retrofit 2.0 以来,即使响应不成功,它也会尝试将具有给定 GSON 的数据转换为 (POJO),从而引发错误,而我丢失了错误的实际消息。

正如@david:mihola 所建议的那样,使用 Retrofit Response 对象我能够实现这一目标。

Response<MyObject> response;
if(response.isSucessful) {
   MyObject obj = response.body();
} else {
  // You can process your error message from the reponse
}

它真的让我免于大量手动 GSON 解析