Java 如何在没有web.xml的DispatcherServlet上下文中捕获Spring PageNotFound异常?
我试图捕获所有SpringMVC错误并显示自定义错误页面,以避免显示本机Tomcat页面 我尝试了几个Java 如何在没有web.xml的DispatcherServlet上下文中捕获Spring PageNotFound异常?,java,spring,spring-mvc,exception,exception-handling,Java,Spring,Spring Mvc,Exception,Exception Handling,我试图捕获所有SpringMVC错误并显示自定义错误页面,以避免显示本机Tomcat页面 我尝试了几个@ExceptionHandler,比如: @ExceptionHandler(Exception.class) @ExceptionHandler(RuntimeException.class) @ExceptionHandler(Throwable.class) 但是404总是转换为本机Tomcat页面(其他异常映射也可以) 在请求不存在的URL期间,@ControllerAdvice中的
@ExceptionHandler
,比如:
@ExceptionHandler(Exception.class)
@ExceptionHandler(RuntimeException.class)
@ExceptionHandler(Throwable.class)
但是404总是转换为本机Tomcat页面(其他异常映射也可以)
在请求不存在的URL期间,@ControllerAdvice
中的异常处理程序从未被调用,我收到这样的日志消息:
o.s.w.s.PageNotFound WARN - No mapping found for HTTP request with URI [/websandbox/asdas] in DispatcherServlet with name 'dispatcher'
如何避免从spring上下文回退到本机Tomcat错误页面?
我的dispatcher servlet映射到/
(而不是/*
)
不是,我没有抛出自定义异常-此异常是在请求未映射url(如/knloqtnqklnwejlfnqw)时生成的。未映射的资源将始终在部署描述符处被拒绝,它将是web.xml
如果您想对可以引用的类使用@ExceptionHandler。然而,我觉得它不是很有说服力,但它仍然可以帮助您从控制器映射未发现的异常和其他异常。未映射的资源将始终在部署描述符处被拒绝,它将是web.xml
如果您想对可以引用的类使用@ExceptionHandler。然而,我觉得它不是很有说服力,但它仍然可以帮助您从控制器映射未发现的异常和其他异常。实际上,我通过诊断
DispatcherServlet
源找到了确切的解决方案。我们需要为dispatcher servlet指定init param:
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
ThroweExceptionIfNoHandlerFound
真的
所以,404是非常特殊的情况。实际上,我通过诊断DispatcherServlet源代码找到了确切的解决方案。我们需要为dispatcher servlet指定init param:
<init-param>
<param-name>throwExceptionIfNoHandlerFound</param-name>
<param-value>true</param-value>
</init-param>
ThroweExceptionIfNoHandlerFound
真的
所以,404是非常特殊的情况。在Java代码中有什么方法可以做到这一点吗?我的意思是通过使用一个
实现WebApplicationInitializer
的类,在Java代码中有什么方法可以做到这一点吗?我的意思是使用一个实现WebApplicationInitializer的类?