Retrofit – Interceptar respuestas globalmente

Quisiera interceptar todas las respuestas recibidas por el motor del retrofit, y exploración para el código de error del HTTP, por ejemplo error 403.

Soy consciente de que puedo usar el fallo (RetrofitError error) callback de cada solicitud y comprobar si hay 403 pero me gustaría envolver la respuesta globalmente.

Puedo ver que la intercepción de la petición es posible, pero no veo una opción similar para la respuesta.

¿Alguna sugerencia?

Yo era capaz de lograr que mediante la adición de un interceptor para el OkHttpClient que retrofit está utilizando.

public class ForbiddenInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Response response = chain.proceed(request); if (response.code() == 403) { doStuff(); } return response; } } OkHttpClient okHttpClient = Utils.createUnsafeOkHttpClient(); okHttpClient.interceptors().add(new ForbiddenInterceptor()); RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder() .setEndpoint(API_BASE_URL) .setClient(new OkClient(okHttpClient)); 

Otra posibilidad es anular el método execute en el OkClient de OkClient . En mi caso estaba buscando una cabecera de respuesta específica, por lo que fue algo como esto:

 OkClient client = new OkClient(okHttpClient) { @Override public retrofit.client.Response execute(retrofit.client.Request request) throws IOException { retrofit.client.Response response = super.execute(request); // Do whatever with 'response', such as looking for the value of a particular header: List<retrofit.client.Header> headers = response.getHeaders(); for (retrofit.client.Header header : headers) { if (MY_HEADER.equalsIgnoreCase(header.getName())) { this.savedValue = header.getValue(); break; } } return response; } }; RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder() .setEndpoint(API_BASE_URL) .setClient(client); 
  • Android okHttp addFormDataPart dinámicamente para múltiples imágenes
  • Conexión cerrada por peer (Android 5)
  • Android - OkHttp interceptor - respuesta ya "consumida"
  • El fallo de conexión de Retrofit devuelve RetrofitError.response como null
  • No se puede cerrar ChunkedInputStream rápidamente en Android 4.4 KitKat
  • Android OkHttp InputStream java.IOException.closed
  • Cómo agregar matriz a okhttp cuerpo (POST)
  • ¿Cómo implementar Android Volley con OkHttp 2.0?
  • ¿Cómo alertar al usuario utilizando Toast que la solicitud OkHttp devolvió algo distinto de 200?
  • Android forma correcta de utilizar OKHTTP singleton para consultas paralelas con cookies
  • Volea Android MalformedURLException URL incorrecta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.