打印日志
RestTemplate restTemplate = new RestTemplate();
//通过BufferingClientHttpRequestFactory对象包装现有的ResquestFactory,用来支持多次调用getBody()方法
restTemplate.setRequestFactory(new BufferingClientHttpRequestFactory(new OkHttp3ClientHttpRequestFactory(new OkHttpClient().newBuilder()
.connectionPool(new ConnectionPool(500, 300, TimeUnit.MINUTES))
.connectTimeout(2, TimeUnit.MINUTES)
.readTimeout(20, TimeUnit.MINUTES)
.build())));
// 打印记录
restTemplate.setInterceptors(Collections.singletonList(new ClientHttpRequestInterceptor() {
@Override
public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException {
long start = System.currentTimeMillis();
ClientHttpResponse response = execution.execute(request, body);
long cost = System.currentTimeMillis() - start;
// 打印日志
// 记录日志
String responseStr = IOUtils.toString(response.getBody(), StandardCharsets.UTF_8);
log.info(
"\n" +
"URI : {}, \n" +
"Method : {}, \n" +
"Headers : {}, \n" +
"Param : {}, \n" +
"RespStatus : {}, \n" +
"Response : {}", request.getURI(),
request.getMethod(), request.getHeaders(), new String(body, StandardCharsets.UTF_8), response.getStatusCode(), responseStr);
return response;
}
}));
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-Type", "application/xml");
HttpEntity<?> request = new HttpEntity<>(user, httpHeaders);
User forObject = restTemplate.postForObject("http://localhost:8080/xml", request, User.class);
System.out.println(forObject);