下面是代码片段;基本上,当错误代码不是200时,我试图传播异常。
ResponseEntity<Object> response = restTemplate.exchange(url.toString().replace("{version}", version),
HttpMethod.POST, entity, Object.class);
if(response.getStatusCode().value()!= 200){
logger.debug("Encountered Error while Calling API");
throw new ApplicationException();
}但是,在服务器响应为500的情况下,我将得到异常
org.springframework.web.client.HttpServerErrorException: 500 Internal Server Error
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:94) ~[spring-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]我真的需要在尝试中包装rest模板交换方法吗?那么,编码的目的是什么呢?
发布于 2016-06-29 08:10:08
您希望创建一个实现ResponseErrorHandler的类,然后使用它的一个实例来设置rest模板的错误处理:
public class MyErrorHandler implements ResponseErrorHandler {
@Override
public void handleError(ClientHttpResponse response) throws IOException {
// your error handling here
}
@Override
public boolean hasError(ClientHttpResponse response) throws IOException {
...
}
}
[...]
public static void main(String args[]) {
RestTemplate restTemplate = new RestTemplate();
restTemplate.setErrorHandler(new MyErrorHandler());
}此外,Spring有类DefaultResponseErrorHandler,您可以扩展该类,而不是实现接口,以防只想覆盖handleError方法。
public class MyErrorHandler extends DefaultResponseErrorHandler {
@Override
public void handleError(ClientHttpResponse response) throws IOException {
// your error handling here
}
}看看它的源代码,了解一下Spring如何处理HTTP错误。
发布于 2018-08-01 20:36:13
Spring巧妙地将http错误代码视为异常,并假设您的异常处理代码具有处理错误的上下文。要使exchange按您的预期运行,请执行以下操作:
try {
return restTemplate.exchange(url, httpMethod, httpEntity, String.class);
} catch(HttpStatusCodeException e) {
return ResponseEntity.status(e.getRawStatusCode()).headers(e.getResponseHeaders())
.body(e.getResponseBodyAsString());
}这将返回响应的所有预期结果。
发布于 2016-06-29 07:52:30
您应该捕获一个HttpStatusCodeException异常:
try {
restTemplate.exchange(...);
} catch (HttpStatusCodeException exception) {
int statusCode = exception.getStatusCode().value();
...
}https://stackoverflow.com/questions/38093388
复制相似问题