Estoy usando una clase simple de Spring Interceptor para registrar todas las solicitudes/respuestas REST para el objeto RestTemplate en mi aplicación de Android. Hasta ahora todo funciona bien.Lea el cuerpo de respuesta en un Android Spring Interceptor
public class LoggerInterceptor implements ClientHttpRequestInterceptor {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body,
ClientHttpRequestExecution execution) throws IOException {
Log.d(TAG, "Request body: " + new String(body));
// ...more log statements...
ClientHttpResponse response = execution.execute(request, body);
Log.d(TAG, "Response Headers: " + response.getHeaders());
return response;
}
En la inicialización Me llaman:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
LoggerInterceptor loggerInterceptor = new LoggerInterceptor();
interceptors.add(loggerInterceptor);
restTemplate.setInterceptors(interceptors);
Sin embargo, no puede iniciar sesión response.getBody()
en el método anterior debido a que el InputStream se consume de una vez y lanza una IllegalStateException cuando se consume de nuevo más tarde. ¿Hay alguna forma de evitar esto para poder registrar el cuerpo de la respuesta también?
Usando el marco 3.1 Spring o posterior, esta es definitivamente una solución más elegante. – Nachi