gpt4 book ai didi

java - 读取 Android Spring 拦截器中的响应主体

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:52:02 33 4
gpt4 key购买 nike

我正在使用一个简单的 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com