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 .

  • Uso de RoboSpice y RxJava
  • Obtención de datos del caché antes de ejecutar una solicitud de red con RoboSpice
  • Borrar datos antiguos de caché con robospice ormlite
  • Android: cómo recuperar el objeto JSON en caso de una excepción con RoboSpice
  • ¿Cómo conectarse a una solicitud pendiente con RoboSpice (Splash> Actividad principal)?
  • Uso de RoboSpice con Jackson2 y Spring
  • Objeto de almacenamiento Robospice que extiende ArrayList en la base de datos a través de Ormlite
  • RoboSpice y ORMLite - Acceso a los datos
  • Error de entrada de Duplicate Commons-Io usando Robospice y Android Studio
  • Guardando colección extranjera en ORMLite con Robospice y Scala
  • Detener un proceso de fondo en robospice
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.