如何使用Spring MVC中的@ControllerAdvice处理HTTP状态404错误

时间:2016-01-13 14:58:20

标签: spring spring-mvc exception-handling

我在我的网络应用程序中使用spring MVC。我一直在尝试各种选项来返回我的应用程序中抛出的各种异常的自定义错误页面。 我已经设法使用@ControllerAdvice注释来做到这一点。我的全局异常处理程序类如下:

import org.apache.velocity.exception.ResourceNotFoundException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

@ControllerAdvice
public class ExceptionControllerAdvice
{

    private static final Logger logger  = LoggerFactory.getLogger(ExceptionControllerAdvice.class);

    @ExceptionHandler(Exception.class)
    public String exception(Exception e) 
    {
        logger.error(e.toString());
        return "exceptionPage";
    }

    @ExceptionHandler(ResourceNotFoundException.class)
    @ResponseBody
    @ResponseStatus(HttpStatus.NOT_FOUND)
    public String handleMissingParameter() 
    {
        return "exceptionPage";
    }
}

但我遇到的麻烦是HTTP 404错误。有没有办法我也可以使用此注释处理HTTP状态错误。我也使用Apache瓷砖,我使用瓷砖渲染我的页面,我使用ftl页面。

1 个答案:

答案 0 :(得分:2)

有同样的问题,似乎无法在任何地方找到答案然后我找到了这个博客 http://nixmash.com/java/custom-404-exception-handling-in-spring-mvc/

将以下代码添加到您的控制器:

@RequestMapping(value ={ "{path:(?!resources|static).*$}","{path:(?!resources|static)*$}/**" }, headers = "Accept=text/html")

public void unknown() throws Exception{
    throw new Exception();
}
}

任何包含"资源"的路径或者"静态"不会返回错误页面 - 这是为了防止图像不显示,但任何其他未映射的页面都会引发错误页面

基本上这会返回您在控制器建议中配置的404错误页面(exceptionPage