8

シンプルな Spring Interceptor クラスを使用して、Android アプリの RestTemplate オブジェクトに対するすべての REST 要求/応答をログに記録しています。これまでのところ、すべて正常に動作しています。

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);

response.getBody()ただし、InputStream が一度消費され、後で再度消費されると IllegalStateException がスローされるため、上記のメソッドにログインできません。応答本文もログに記録できるように、これを回避する方法はありますか?

4

2 に答える 2

6

自分で実装し、メソッドとオーバーライドClientHttpResponseを追加します。上記のコードでは、バイト配列を に保存し、必要なものをログに記録してから、 を実装するクラスのインスタンスにバイト配列を設定し直し、それを返すことができます。setBody(byte[] body)getBodyByteArrayInputStreamClientHttpResponse

于 2012-06-20T15:47:06.187 に答える