我正在尝试捕获所有spring MVC错误并显示自定义错误页面,以避免显示本机Tomcat页面。
我尝试了几个@ExceptionHandler
,如:
@ExceptionHandler(Exception.class)
@ExceptionHandler(RuntimeException.class)
@ExceptionHandler(Throwable.class)
但是404总是被转换为本机Tomcat页面(其他异常映射工作)。
@ControllerAdvice
中的异常处理程序在请求不存在的URL期间从不被调用,并且我收到了这样的日志消息:
o.s.w.s.PageNotFound WARN - No mapping found for HTTP request with URI [/websandbox/asdas] in DispatcherServlet with name 'dispatcher'
如何避免从spring上下文回退到本机Tomcat错误页面?
我的调度程序servlet映射到/
(不是/*
)
不是,我没有抛出自定义异常 - 在请求未映射的URL时生成此异常,如/ knloqtnqklnwejlfnqw
答案 0 :(得分:5)
实际上我通过诊断DispatcherServlet
来源找到了确切的解决方案。我们需要为调度程序servlet指定init-param:
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
所以,404是非常具体的案例。
答案 1 :(得分:0)
未映射的资源将始终在部署描述符中被拒绝,它将是web.xml。
How to configure custom errors in Spring MVC本文介绍了如何执行此操作。
我希望这就是你需要做的一切。
如果您想对某个类使用@ExceptionHandler,可以参考this article。但是,我没有发现它非常有说服力,但它仍然可以帮助您映射NOT_FOUND异常和控制器中的其他异常。