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

在Spring中出现异常后设置(http)状态代码(不是500)

左丘边浩
2023-03-14

正如标题所暗示的,我希望在发生异常后更改http状态。简短的背景是,为了能够显示错误页面,我需要向客户机发送一个200的状态代码。(在错误状态代码中,它转储数据并显示一个通用的错误弹出窗口)

为了测试这一点,我有:

    @RequestMapping(value= "/err")
    public String throwError()
    {
        throw new IllegalStateException();
    }
    <error-page>
        <error-code>500</error-code>
        <location>/errorPage</location>
    </error-page>
    @RequestMapping(value = "/errorPage", method = RequestMethod.GET)
    public String errorPage(HttpServletResponse response, Model model, Locale locale ) {
        int errorStatus = response.getStatus();
        response.reset();
        model.addAttribute("errorStatus", errorStatus);
        response.setStatus(HttpServletResponse.SC_ACCEPTED);
        LOGGER.debug("---------->" + response.getStatus());
        return "errorPage";
    }

令人困惑的(也许不是?)事情是,如果我从errorPage控制器返回一个响应实体并设置状态代码,这将被接受。例如:

    return new ResponseEntity(HttpStatus.ACCEPTED);

我认为这不是一个bug,而是一个特性,Spring比我更清楚,我真的应该改变我实现这整件事的方式。(!!?)

我不能只返回一个ResponseEntity,因为我需要呈现错误页。我想如果我分散自己,在控制器中呈现页面,并将其放入ResponseEntity中,就可以实现我想要的,但这似乎...错了。

共有1个答案

邵城
2023-03-14

可以使用以下代码设置状态代码

@RequestMapping(value= "/err")
public String throwError()
{
     throw new IllegalStateException(message,
                         errorCode);
}
 类似资料:
  • 嗨,我正在使用Hibernate和Postgresql尝试一个简单的Spring MVC CRUD应用程序。我得到了下面的异常 例外: POM.xml文件 在WEB-INF下 网状物xml文件 spring-servlet.xml文件 com.bean包下的EmployeeBean类 com.controller下的EmployeeController类 com下的EmployeeDao类。dao

  • 我们在前端使用OpenWeb js库,它们需要.NET中间层在发生某些类型的错误时向它们发送特定的HTTP头状态代码。我试图做到这一点: 它有点半途而废。看截图:http状态码 http://zerogravpro.com/temp/pic.png 请注意,我在响应标头中实现了状态码400,但我确实需要请求标头中的400。相反,我得到了“200 OK”。我如何实现这一点? 我用于进行调用的 URL

  • HTTP 1xx消息 这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于HTTP/1.0协议中没有定义任何1xx状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送1xx响应。 这些状态码代表的响应都是信息性的,标示客户应该采取的其他行动。 100-客户端应当继续发送请求 101-切换协议 102-处理将被继续执行

  • 是否可以根据错误状态代码在spring retry(https://github.com/spring-projects/spring-retry)中设置RetryPolicy?例如,我想用重试状态代码503。因此,它应该忽略所有其他错误代码--[500-502]和[504-511]。

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

  • 我创建了一个GET服务来重定向到使用POST的网页。我正在尝试使用,因为有了它,我可以发送请求服务的正文和标头,并且我已经实现了从服务中获取我需要的信息。 然而,我需要重定向到具有POST服务的服务器,但我不能,因为我不知道如何设置状态代码,我将其重定向到另一台服务器。 这些是我正在使用的函数: