一尘不染

Spring Resttemplate异常处理

spring

下面是代码片段;基本上,当错误代码不是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]

我真的需要在尝试中包装其余模板交换方法吗?那么代码的目的是什么?


阅读 1120

收藏
2020-04-11

共1个答案

一尘不染

你想要创建一个实现的类,ResponseErrorHandler然后使用它的一个实例来设置其余模板的错误处理:

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
  }
}
2020-04-11