Java 抛出404并重定向到Spring中的自定义错误页

Java 抛出404并重定向到Spring中的自定义错误页,java,spring,spring-mvc,jakarta-ee,http-status-code-404,Java,Spring,Spring Mvc,Jakarta Ee,Http Status Code 404,我有下面一段异常处理程序,当找不到资源时,它会重定向到“notfound”页面。但是,在apache日志中,我没有看到404错误代码。有没有办法得到这个异常处理程序抛出的404错误 @ExceptionHandler(UnknownIdentifierException.class) public String handleUnknownIdentifierException(final UnknownIdentifierException e, final HttpServletRequest

我有下面一段异常处理程序,当找不到资源时,它会重定向到“notfound”页面。但是,在apache日志中,我没有看到404错误代码。有没有办法得到这个异常处理程序抛出的404错误

@ExceptionHandler(UnknownIdentifierException.class)
public String handleUnknownIdentifierException(final UnknownIdentifierException e, final HttpServletRequest request)
{
    request.setAttribute("message", e.getMessage());
    return "forward:notfoundpage";
}

最好不要重定向到错误页面,只需显示错误消息并设置错误HTTP状态代码即可。您可以通过在控制器处理程序方法中引发异常来实现这一点

您需要创建一个类,然后抛出它(尽管您可能已经使用UnknownIdentifierException完成了此操作):

在控制器处理程序方法中:

throw new ResourceNotFoundException();
要在web.xml中设置要在异常中显示的页面,请执行以下操作:

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/views/errors/404.jsp</location>
</error-page>

404
/WEB-INF/views/errors/404.jsp
是:

另一种方法是使用特殊注释标记异常:

 @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")  // 404
    public class UnknownIdentifierException extends RuntimeException {
        // ...
    }
还有一种方法是在处理程序本身的注释中指定错误代码:

  @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Data integrity violation")  
@ExceptionHandler(UnknownIdentifierException.class)
public String handleUnknownIdentifierException(final UnknownIdentifierException e, final HttpServletRequest request)
{
///

以下是关于主题的长篇博文:

谢谢。但是,下一行的重定向不会覆盖我们刚刚设置的404吗?如果是重定向-是的,但这里是转发对不起Alex。我是说向前。所以当我们使用forward时,它不会改变HTTP代码,它仍然是404?
 @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No such Order")  // 404
    public class UnknownIdentifierException extends RuntimeException {
        // ...
    }
  @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="Data integrity violation")  
@ExceptionHandler(UnknownIdentifierException.class)
public String handleUnknownIdentifierException(final UnknownIdentifierException e, final HttpServletRequest request)
{
///