当前位置: 首页 > 知识库问答 >
问题:

如果Http状态为500[重复],Spring RestTem板总是抛出异常

萧和同
2023-03-14

是否可以在不使用Exceptions处理超文本传输协议状态500响应的情况下使用Spring RestTem板?

        RestTemplate restTemplate = new RestTemplate();
        try {
            response = restTemplate.getForEntity(probe.getUrl(), String.class);
            boolean isOK = response.getStatusCode() == HttpStatus.OK;
            // would be nice if 500 would also stay here
        }
        catch (HttpServerErrorException exc) {
            // but seems only possible to handle here...
        }

共有2个答案

弘浩瀚
2023-03-14

没有经过测试,但是您可以简单地使用一个自定义的响应错误处理程序,它不是Default响应错误处理程序,或者它扩展了Default响应错误处理程序,但覆盖了hasError()

呼延鸿畅
2023-03-14

如果使用springmvc,则可以使用annotation@ControllerAdvice创建控制器。在控制器中写入:

@ExceptionHandler(HttpClientErrorException.class)
public String handleXXException(HttpClientErrorException e) {
    log.error("log HttpClientErrorException: ", e);
    return "HttpClientErrorException_message";
}

@ExceptionHandler(HttpServerErrorException.class)
public String handleXXException(HttpServerErrorException e) {
    log.error("log HttpServerErrorException: ", e);
    return "HttpServerErrorException_message";
}
...
// catch unknown error
@ExceptionHandler(Exception.class)
public String handleException(Exception e) {
    log.error("log unknown error", e);
    return "unknown_error_message";
}

DefaultResseErrorHandler抛出这两种异常:

@Override
public void handleError(ClientHttpResponse response) throws IOException {
    HttpStatus statusCode = getHttpStatusCode(response);
    switch (statusCode.series()) {
        case CLIENT_ERROR:
            throw new HttpClientErrorException(statusCode, response.getStatusText(),
                    response.getHeaders(), getResponseBody(response), getCharset(response));
        case SERVER_ERROR:
            throw new HttpServerErrorException(statusCode, response.getStatusText(),
                    response.getHeaders(), getResponseBody(response), getCharset(response));
        default:
            throw new RestClientException("Unknown status code [" + statusCode + "]");
    }
}

您可以使用:e.getResponseBodyAsString() e.getStatusCode() blabla可获取响应消息。

 类似资料:
  • 嗨,我正在使用Hibernate和Postgresql尝试一个简单的Spring MVC CRUD应用程序。我得到了下面的异常 例外: POM.xml文件 在WEB-INF下 网状物xml文件 spring-servlet.xml文件 com.bean包下的EmployeeBean类 com.controller下的EmployeeController类 com下的EmployeeDao类。dao

  • 我想尝试一个简单的程序,但出现以下错误。我正在使用Eclipse Kelper和Tomcat 7.0。我尝试了很多东西,但都不管用。 有源代码: > web.xml: servlet-context.xml: 有人能解释一下问题出在哪里吗?

  • 我正在学习Spring MVC,当我试图运行这个简单索引时。jsp我遇到了这些错误。消息错误与Servlet有关。servlet mvc调度程序的init()引发异常 如果有可能写一个项目并寄给我,非常感谢。 这是我的控制器 这是Web.xml dispatcher-servlet.xml 此索引.jsp

  • 我正在尝试从跨域服务器检索图像。我在WAMP堆栈服务器上使用自签名证书,但无论我使用哪种标头,get ch()总是在飞行前检查后抛出异常。以下是取自Chrome的请求/响应标头: 这是调用get ch()的javascript代码: 以下是图像所在目录中 .htaccess 的标头: 我已经为此工作了好几天。我什至尝试过在 apache 配置文件中使用 RewriteRule 指令强制使用 htt

  • 我的资源 index.jsp HTTP状态500-servlet Jersey Web应用程序的servlet.init()引发异常 类型异常报告 servlet Jersey Web应用程序的消息servlet.init()引发异常 Apache Tomcat/8.0.43

  • 好的,我在运行我的应用程序时遇到了这个问题,我相信这是因为版本控制。 秋季开始,我使用Tomcat 9.0.4。我使用最新的JavaSDK。 现在,我使用的是Spring版本5.0.2。 这是我的pom。xml: 这是我的web.xml: 这是我的调度器servlet。xml: 现在,我想提一件事:看看那些?我不确定这是否正确。为什么?这就是我在输出中得到的错误: 现在,我知道这是一大段文字,你可