我正在使用一个简单的 Spring 拦截器类来记录我的 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。有没有办法解决这个问题,以便我也可以记录响应正文?
最佳答案
为了允许多个 response.getBody()
调用将您的 ClientHttpRequestFactory 包装在 BufferingClientHttpRequestFactory 中。
ClientHttpRequestFactory requestFactory =
new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory());
restTemplate.setRequestFactory(requestFactory);
关于java - 读取 Android Spring 拦截器中的响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119487/