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);
}
但它总是告诉我输入流很接近。这是一个错误还是我遗漏了什么?
RestTemplate 的默认错误处理程序DefaultResponseErrorHandler
已经读取响应正文并将其设置在HttpStatusCodeException
它抛出的对象中。
try {
restTemplate.getForObject("http://...", String.class);
} catch (HttpStatusCodeException e) {
System.out.println("Received error: " + e.getResponseBodyAsString());
}
如果您想始终在错误时记录响应正文而不需要 catch 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;
}
}
}
在实例化 rest 模板时使用上面的错误处理程序。
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new LoggingErrorHandler());
String response = restTemplate.getForObject("http://...", String.class);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句