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

时间:2015-04-02 17:34:07

标签: java spring spring-mvc java-ee http-status-code-404

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

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

2 个答案:

答案 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>