首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理

异常处理
EN

Stack Overflow用户
提问于 2016-06-29 07:46:56
回答 16查看 294.5K关注 0票数 162

下面是代码片段;基本上,当错误代码不是200时,我试图传播异常。

代码语言:javascript
复制
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的情况下,我将得到异常

代码语言:javascript
复制
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模板交换方法吗?那么,编码的目的是什么呢?

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2016-06-29 08:10:08

您希望创建一个实现ResponseErrorHandler的类,然后使用它的一个实例来设置rest模板的错误处理:

代码语言:javascript
复制
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方法。

代码语言:javascript
复制
public class MyErrorHandler extends DefaultResponseErrorHandler {
  @Override
  public void handleError(ClientHttpResponse response) throws IOException {
    // your error handling here
  }
}

看看它的源代码,了解一下Spring如何处理HTTP错误。

票数 158
EN

Stack Overflow用户

发布于 2018-08-01 20:36:13

Spring巧妙地将http错误代码视为异常,并假设您的异常处理代码具有处理错误的上下文。要使exchange按您的预期运行,请执行以下操作:

代码语言:javascript
复制
    try {
        return restTemplate.exchange(url, httpMethod, httpEntity, String.class);
    } catch(HttpStatusCodeException e) {
        return ResponseEntity.status(e.getRawStatusCode()).headers(e.getResponseHeaders())
                .body(e.getResponseBodyAsString());
    }

这将返回响应的所有预期结果。

票数 81
EN

Stack Overflow用户

发布于 2016-06-29 07:52:30

您应该捕获一个HttpStatusCodeException异常:

代码语言:javascript
复制
try {
    restTemplate.exchange(...);
} catch (HttpStatusCodeException exception) {
    int statusCode = exception.getStatusCode().value();
    ...
}
票数 67
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38093388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档