Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在没有web.xml的DispatcherServlet上下文中捕获Spring PageNotFound异常?_Java_Spring_Spring Mvc_Exception_Exception Handling - Fatal编程技术网

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

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中的

我试图捕获所有SpringMVC错误并显示自定义错误页面,以避免显示本机Tomcat页面

我尝试了几个
@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

  • 您需要配置web.xml以将这些错误抛出到特定的URL,例如/404
  • 现在,您需要将这些url映射到可以采取必要操作的控制器
  • 本文展示了如何做到这一点

    我希望这就是你需要做的一切


    如果您想对可以引用的类使用@ExceptionHandler。然而,我觉得它不是很有说服力,但它仍然可以帮助您从控制器映射未发现的异常和其他异常。

    未映射的资源将始终在部署描述符处被拒绝,它将是web.xml

  • 您需要配置web.xml以将这些错误抛出到特定的URL,例如/404
  • 现在,您需要将这些url映射到可以采取必要操作的控制器
  • 本文展示了如何做到这一点

    我希望这就是你需要做的一切


    如果您想对可以引用的类使用@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的类?