Liest den Antworttext in einem Android Spring Interceptor

8

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.

%Vor%

Bei der Initialisierung rufe ich:

%Vor%

Allerdings kann ich in der obigen Methode response.getBody() nicht protokollieren, da der InputStream einmal verbraucht wird und eine IllegalStateException auslöst, wenn er später wieder verbraucht wird. Gibt es einen Weg, um den Antwortkörper zu protokollieren?

    
Nachi 20.06.2012, 12:23
quelle

2 Antworten

11

Um mehrere response.getBody() -Anrufe zuzulassen, umbrechen Sie Ihre ClientHttpRequestFactory in einer BufferingClientHttpRequestFactory.

%Vor%     
Jataro 17.10.2014, 00:41
quelle
6

Implementieren Sie ClientHttpResponse selbst und fügen Sie eine setBody(byte[] body) -Methode hinzu und überschreiben Sie getBody . In Ihrem obigen Code können Sie dann das Byte-Array in ByteArrayInputStream speichern, die gewünschten Daten protokollieren und dann das Byte-Array in der Instanz Ihrer Klasse zurücksetzen, die ClientHttpResponse implementiert, und die Sie dann zurückgeben können.

    
vahidg 20.06.2012 15:47
quelle