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

标签 java spring spring-mvc exception

我正在 try catch 所有 Spring MVC 错误并显示自定义错误页面,以避免呈现 native Tomcat 页面。

我尝试使用几个@ExceptionHandler,例如:

@ExceptionHandler(Exception.class)
@ExceptionHandler(RuntimeException.class)
@ExceptionHandler(Throwable.class)

但 404 始终会转换为 native 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 上下文回退到 native Tomcat 错误页面?

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

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

最佳答案

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

<init-param>
            <param-name>throwExceptionIfNoHandlerFound</param-name>
            <param-value>true</param-value>
 </init-param>

所以,404 是非常特殊的情况。

关于java - 如何在没有 web.xml 的情况下在 DispatcherServlet 上下文中捕获 Spring PageNotFound 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28364564/

相关文章:

java - 如何淡入graphics.fill调用

java - 如何使用对象内部的一些属性来使用它们?

hibernate - @autowired 注释问题,不在类中注入(inject) bean,使用 Spring3.0, hibernate

Spring Security - 无法避免缓存控制

java - 为什么 OpenShift Tomcat 7 (JBoss EWS 2.0) 不支持 <form :*> tags of spring MVC in jsps?

java - concurrencyLevel 为 1 的 ConcurrentHashMap 是否可以像 HashMap 一样工作

java - 在 Websphere 上运行 Project 时找不到要添加到服务器的有效父模块

java - RestController设计之争——Spring Boot REST API

java - 获取过滤器类中的 Autowired 服务

spring - 如何将 Spring HATEOAS "linkTo"与 Kotlin DSL 一起使用?