私はAndroidアプリケーションでRestTemplateオブジェクトのすべてのRESTリクエスト/レスポンスを記録するために単純なSpringインターセプタクラスを使用しています。これまでのところすべて正常に動作します。初期化時AndroidのSpringインターセプタでレスポンスボディを読む
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;
}
私が呼ん:
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<ClientHttpRequestInterceptor>();
LoggerInterceptor loggerInterceptor = new LoggerInterceptor();
interceptors.add(loggerInterceptor);
restTemplate.setInterceptors(interceptors);
のInputStreamが一度に消費し、それが後に再び消費されたときはIllegalStateExceptionをスローしますので、私は上記の方法でresponse.getBody()
をログに記録することはできませんが。これを回避する手段があるので、私は応答のボディも記録できますか?
3.1 Springフレームワーク以降を使用すると、これは間違いなくより洗練されたソリューションです。 – Nachi