Java 抛出404并重定向到Spring中的自定义错误页
我有下面一段异常处理程序,当找不到资源时,它会重定向到“notfound”页面。但是,在apache日志中,我没有看到404错误代码。有没有办法得到这个异常处理程序抛出的404错误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
@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)
{
///