gpt4 book ai didi

java - Spring Boot 为自定义错误页面返回 200 状态代码

转载 作者:行者123 更新时间:2023-12-01 09:27:22 26 4
gpt4 key购买 nike

我想覆盖白标错误页面。作为一个例子,我完成了这个简单的类(class):

@RestController
public class MyCustomErrorController implements ErrorController {

private static final String PATH = "/error";

@RequestMapping(value = PATH)
public String error() {
return "This is the error page";
}

@Override
public String getErrorPath() {
return PATH;
}
}

我的例子来自这里: https://gist.github.com/jonikarppinen/662c38fb57a23de61c8b

根据这个要点,它实际上有这样的评论:

// Appropriate HTTP response code (e.g. 404 or 500) is automatically set by Spring. 
// Here we just define response body.

但这不是我所看到的。例如,如果我点击一个 URL,我知道它应该响应我一个 500 状态代码(故意 NullPointerException ),那么这就是我应该看到的内容,但是当我点击该 URL 时,我会收到一个 200 响应,并显示我的错误消息(“这是错误页面”)

如果我不使用这个自定义 Controller ,那么它会显示一个带有堆栈跟踪的 500 错误页面,这是默认行为。我在这里看到了 2014 年提出的一个老问题: https://github.com/spring-projects/spring-boot/issues/684有人提到了同样的问题,但是他们的解决方案是显式显示 500 个响应,这并没有真正通过 HTTP 响应代码。

仅供记录,我实际上在 org.apache.catalina.connector.Response.sendError() 上放置了一个断点方法。当这个自定义错误 Controller 不存在时,我可以清楚地看到 sendError()方法正在被调用,状态为 500。但是,如果我将 HttpServletResponse 参数添加到我的 error()方法我没有看到该实例设置了 500 状态代码。

最佳答案

说明

在您提供的网站示例中,HttpStatus从注入(inject)的 HttpServletResponse 中检索。所以如下:

Appropriate HTTP response code (e.g. 404 or 500) is automatically set by Spring.

表示

Spring sets it on the HttpServletResponse that he gets injected into his method as argument.

  • 然后,他必须检索状态并将其设置在他的模型上 ErrorJson .

解决方案

要按照您的示例,您可以将方法更改为:

@RequestMapping(value = ERROR_MAPPING)
public ResponseEntity<String> error(HttpServletResponse response) {
return new ResponseEntity<String>("This is the error page",
HttpStatus.valueOf(response.getStatus()));
}
  • 我用了ResponseEntity<String>而不是定义自定义对象(又名 ErrorJson )。

  • 我相信您知道,除了使用 HttpServletResponse的状态,您可以将您的状态设置为 HttpStatus .

关于java - Spring Boot 为自定义错误页面返回 200 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736472/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com