Spring mvc 使用SpringRestTemplate,当出现错误时,如何记录响应?
SpringRestTemplate可以设置errorHandler,它具有处理错误的方法。我有一个这样的错误处理程序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
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);