Spring mvc 使用SpringRestTemplate,当出现错误时,如何记录响应?

Spring mvc 使用SpringRestTemplate,当出现错误时,如何记录响应?,spring-mvc,spring-boot,Spring Mvc,Spring Boot,SpringRestTemplate可以设置errorHandler,它具有处理错误的方法。我有一个这样的错误处理程序 try (BufferedReader buffer = new BufferedReader(new InputStreamReader(clientHttpResponse.getBody()))) { final String response = buffer.lines().collect(Collectors.joining("\n")); Sy

SpringRestTemplate可以设置errorHandler,它具有处理错误的方法。我有一个这样的错误处理程序

try (BufferedReader buffer = new BufferedReader(new InputStreamReader(clientHttpResponse.getBody()))) {
     final String response = buffer.lines().collect(Collectors.joining("\n"));
     System.out.println(response);
  }

但它总是告诉我输入流很接近。这是一个bug还是我遗漏了什么?

RestTemplate的默认错误处理程序
DefaultResponseErrorHandler
已经读取了响应正文,并将其设置在它抛出的
HttpStatusCodeException
对象中

try {
    restTemplate.getForObject("http://...", String.class);
} catch (HttpStatusCodeException e) {
    System.out.println("Received error: " + e.getResponseBodyAsString());
}
如果希望始终在错误时记录响应主体,而不需要捕获
httpstatuscodecoexception
,则可以扩展默认的错误处理程序

public static class LoggingErrorHandler extends DefaultResponseErrorHandler {
    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        try {
            super.handleError(response);
        } catch (HttpStatusCodeException e) {
            System.out.println("Error response body is " + e.getResponseBodyAsString());
            throw e;
        }
    }
}
在实例化rest模板时使用上述错误处理程序

RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new LoggingErrorHandler());
String response = restTemplate.getForObject("http://...", String.class);