How to register RestTemplate request and response with spring?

I am using spring with RestTemplate to execute GET requests.

How can I automatically log any request and response data in a log file for each request?

+7
java spring logging spring-rest
source share
1 answer

You can achieve this using ClientHttpRequestInterceptor in Spring. You must override the method to intercept the ClientHttpRequestInterceptor interface.

The following is a snippet of code:

 @Component public class LogRequestResponseFilter implements ClientHttpRequestInterceptor { private static final Logger logger=LoggerFactory.getLogger(LogRequestResponseFilter.class); @Override public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) throws IOException { traceRequest(request, body); ClientHttpResponse clientHttpResponse = execution.execute(request, body); traceResponse(clientHttpResponse); return clientHttpResponse; } private void traceRequest(HttpRequest request, byte[] body) throws IOException { logger.debug("request URI : " + request.getURI()); logger.debug("request method : " + request.getMethod()); logger.debug("request body : " + getRequestBody(body)); } private String getRequestBody(byte[] body) throws UnsupportedEncodingException { if (body != null && body.length > 0) { return (new String(body, "UTF-8")); } else { return null; } } private void traceResponse(ClientHttpResponse response) throws IOException { String body = getBodyString(response); logger.debug("response status code: " + response.getStatusCode()); logger.debug("response status text: " + response.getStatusText()); logger.debug("response body : " + body); } private String getBodyString(ClientHttpResponse response) { try { if (response != null && response.getBody() != null) {// && // isReadableResponse(response)) // { StringBuilder inputStringBuilder = new StringBuilder(); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(response.getBody(), StandardCharsets.UTF_8)); String line = bufferedReader.readLine(); while (line != null) { inputStringBuilder.append(line); inputStringBuilder.append('\n'); line = bufferedReader.readLine(); } return inputStringBuilder.toString(); } else { return null; } } catch (IOException e) { logger.error(e.getMessage(), e); return null; } } 
+4
source share

All Articles