Retrofit / Robospice: ¿Obtener los encabezados de respuesta de una solicitud exitosa?

Estoy usando Retrofit / Robospice para hacer llamadas de api en una aplicación que he construido, con un RetrofitGsonSpiceService. Todas las respuestas se convierten en POJOs utilizando un convertidor GSON, sin embargo hay alguna información que necesito recuperar de la cabecera de respuesta. No puedo encontrar ningún medio para obtener los encabezados (sólo puedo obtener los encabezados si la solicitud no tiene éxito porque la respuesta en bruto se envía en el objeto de error!) ¿Cómo puedo interceptar la respuesta para agarrar los encabezados antes de convertirlo?

Me tomó unos minutos para averiguar exactamente lo que @mato estaba sugiriendo en su respuesta. He aquí un ejemplo concreto de cómo reemplazar el OkClient que viene con Retrofit para interceptar los encabezados de respuesta.

 public class InterceptingOkClient extends OkClient { public InterceptingOkClient() { } public InterceptingOkClient(OkHttpClient client) { super(client); } @Override public Response execute(Request request) throws IOException { Response response = super.execute(request); for (Header header : response.getHeaders()) { // do something with header } return response; } } 

A continuación, pasar una instancia de su cliente personalizado a la RestAdapter.Builder :

 RestAdapter restAdapter = new RestAdapter.Builder() .setClient(new InterceptingOkClient()) .... .build(); 

RoboSpice fue diseñado de una manera que no sabe nada sobre el cliente HTTP que terminas usando en tu aplicación. Dicho esto, debe obtener los encabezados de respuesta del cliente HTTP. Como Retrofit puede usar Apache , OkHttp o el cliente HTTP Android predeterminado , debería echar un vistazo y ver qué cliente está utilizando actualmente. Tenga en cuenta que Retrofit elige el cliente HTTP basado en ciertas cosas (consulte la documentación de Retrofit, o busque en el código, lo encontrará), a menos que lo especifique manualmente.

Retrofit define una interfaz para clientes llamada Client . Si echa un vistazo al código fuente, verá que tres clases implementan esta interfaz: ApacheClient , OkClient y UrlConnectionClient . Dependiendo de cuál de ellos desea utilizar, extiéndase de uno de esos, e intente enganchar en el código que se ejecuta cuando una respuesta vuelve, de modo que usted pueda conseguir los encabezamientos de él.

Una vez que lo haga, tiene que configurar su Client personalizado para Retrofit .

  • RoboSpice lanzando excepciones okhttp
  • ¿Cómo puedo obtener Robospice para tratar cualquier cosa que no sea una respuesta 200 de Retrofit & OKHttp como un error
  • Uso de adaptadores de sincronización + Volley / RoboSpice para procesamiento sincronizado de solicitudes de red
  • Android: cómo recuperar el objeto JSON en caso de una excepción con RoboSpice
  • No hay ningún error de este tipo al usar robospice-retrofit y getstream.io
  • Cambiar ConnectionTimeout de Retrofit OkHttpClient en tiempo de ejecución
  • RoboSpice y ORMLite - Acceso a los datos
  • ¿Cómo conectarse a una solicitud pendiente con RoboSpice (Splash> Actividad principal)?
  • Qué es la Biblioteca RoboSpice en android
  • RoboSpice con Gson y Realm
  • OnStart of new Actividad se llama antes de onStop de padre
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.