我有下面的异常处理程序,重定向到" notfound"找不到资源时的页面。但是,在apache日志中,我没有看到404错误代码。有没有办法让这个异常处理程序抛出404错误?
@ExceptionHandler(UnknownIdentifierException.class)
public String handleUnknownIdentifierException(final UnknownIdentifierException e, final HttpServletRequest request)
{
request.setAttribute("message", e.getMessage());
return "forward:notfoundpage";
}
答案 0 :(得分:1)
是:
@ExceptionHandler(UnknownIdentifierException.class)
public String handleUnknownIdentifierException(final UnknownIdentifierException e, final HttpServletRequest request, final HttpServletResponse response)
{ response.setStatus(404);
request.setAttribute("message", e.getMessage());
return "forward:notfoundpage";
}
另一种方法是使用特殊注释标记您的异常:
@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)
{
///
以下是关于主题的长博文:https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
答案 1 :(得分:0)
最好不要重定向到错误页面,而只是显示错误消息并设置错误HTTP状态代码。您可以通过在控制器处理程序方法中抛出异常来执行此操作。
你需要创建一个类然后抛出它(虽然你可能已经用你的UnknownIdentifierException完成了这个):
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {}
在你的控制器处理程序方法中:
throw new ResourceNotFoundException();
要在web.xml中设置要在异常上显示的页面:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/views/errors/404.jsp</location>
</error-page>