Spring RestTemplate可以设置errorHandler,它具有处理错误的方法。我有这样的错误处理程序
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(clientHttpResponse.getBody()))) {
final String response = buffer.lines().collect(Collectors.joining("\n"));
System.out.println(response);
}
但是它总是告诉我输入流是关闭的。这是错误还是我遗漏了一些东西?
答案 0 :(得分:0)
RestTemplate DefaultResponseErrorHandler
的默认错误处理程序已经读取了响应正文并将其设置在它引发的HttpStatusCodeException
对象中。
try {
restTemplate.getForObject("http://...", String.class);
} catch (HttpStatusCodeException e) {
System.out.println("Received error: " + e.getResponseBodyAsString());
}
如果您想始终在错误时记录响应正文而不需要捕获HttpStatusCodeException
,则可以扩展默认错误处理程序。
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;
}
}
}
在实例化剩余模板时使用上述错误处理程序。
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new LoggingErrorHandler());
String response = restTemplate.getForObject("http://...", String.class);