Ich verwende eine einfache Spring Interceptor-Klasse, um alle REST-Anforderungen/Antworten für das RestTemplate-Objekt in meiner Android-App zu protokollieren. Bis jetzt funktioniert alles gut.Den Antworttext in einem Android Spring Interceptor lesen
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;
}
Bei der Initialisierung nenne ich:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
LoggerInterceptor loggerInterceptor = new LoggerInterceptor();
interceptors.add(loggerInterceptor);
restTemplate.setInterceptors(interceptors);
Allerdings kann ich response.getBody()
in dem oben beschriebenen Verfahren nicht anmelden, da die Input einmal verbraucht werden und lösen eine Illegal, wenn es später wieder verbraucht wird. Gibt es einen Weg, um den Antwortkörper zu protokollieren?
Mit dem 3.1 Spring-Framework oder später ist dies definitiv eine elegantere Lösung. – Nachi