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?
- ¿Cómo se genera la clase con T y List <T>
- Detener un proceso de fondo en robospice
- ¿Puedo usar SpiceManager dentro de un servicio?
- Robospice solicitud nunca termina si la aplicación va en el fondo y luego llega a primer plano?
- Borrar datos antiguos de caché con robospice ormlite
- El edificio con maven falla
- Uso de RoboSpice y RxJava
- Error de entrada de Duplicate Commons-Io usando Robospice y Android Studio
- Uso de RoboSpice con Jackson2 y Spring
- Robospice - Mantenga el servicio de especias continuando funcionando cuando cambia la actividad
- Retrofit: parámetros de consulta múltiples en el comando @GET?
- Robospice en el contexto android.os.Service
- RoboSpice y Jsoup
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 .