我们在使用RestTemplate的时候,往往需要打印http的请求信息,我这里采用ClientHttpRequestInterceptor
拦截request
和response
的方式,具体看以前的文章
RestTemplate反序列化带泛型的返回值。
但是有一个问题是,ClientHttpResponse
的getBody()
返回值是一个InputStream,如果在拦截器将ClientHttpResponse
的body读取了,那么需要获得返回信息的地方就得不到相应体。
解决方案是,在new RestTemplate的时候,使用BufferingClientHttpRequestFactory
,具体代码如下:
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(
new BufferingClientHttpRequestFactory(factory));
return restTemplate;
}