如何在没有web.xml的DispatcherServlet上下文中捕获Spring PageNotFound异常?

Pio*_*ler 0 java spring exception-handling exception spring-mvc

我正在尝试捕获所有spring MVC错误并显示自定义错误页面,以避免呈现本机Tomcat页面.

我试过几个@ExceptionHandler像:

@ExceptionHandler(Exception.class)
@ExceptionHandler(RuntimeException.class)
@ExceptionHandler(Throwable.class)
Run Code Online (Sandbox Code Playgroud)

但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'
Run Code Online (Sandbox Code Playgroud)

如何避免从spring上下文回退到本机Tomcat错误页面?

我的调度程序servlet映射到/(不/*)

不是,我没有抛出自定义异常 - 请求未映射的URL时生成此异常,如/ knloqtnqklnwejlfnqw

Pio*_*ler 5

实际上我通过诊断DispatcherServlet来源找到了确切的解决方案.我们需要为调度程序servlet指定init-param:

<init-param>
            <param-name>throwExceptionIfNoHandlerFound</param-name>
            <param-value>true</param-value>
 </init-param>
Run Code Online (Sandbox Code Playgroud)

所以,404是非常具体的案例.