如何在spring-boot中拦截嵌入式Tomcats上的“全局”404

时间:2015-08-03 01:34:58

标签: spring-mvc tomcat spring-boot

我对spring-boot附带的嵌入式tomcat有一个相当奇怪的问题,特别是它的错误处理。

基本上,我试图通过自定义处理程序处理所有异常。 简而言之:它适用于除404之外的所有事物。这些是通过任何其他机制而不是例外处理的吗?

我测试的所有其他状态代码都调用了我的自定义解析器,只有404s显示默认的Tomcat 404页面。更具体地说,404抛出控制器之外,例如404。如果只有/ test的控制器已注册,则需要/ teXst。在这样的例外情况下,我没有调用我的Resolver,只能看到默认的Tomcat HTTP Status 404页面。

知道可能会妨碍我的方式吗? 以下是我设置解析器的方法

Enter number of columns: 5
All columns match with the value of 4
It took 00:00:00.0156260 to get all columns to match

使用

注释的方式使所有默认的Spring-Boot错误处理失效
public class GlobalExceptionResolver extends AbstractHandlerExceptionResolver {
        @Override
        public int getOrder() {
            return Integer.MIN_VALUE;
        }

        @Override
        protected boolean shouldApplyTo(HttpServletRequest request, Object handler) {
            return true;
        }

        @Override
        protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
     // my stuff ending with returning an instance of ModelAndView
    }

给我留下404,500等的默认Tomcat错误页面,最后用

设置我的自定义处理程序
@EnableAutoConfiguration(exclude = org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.class)

如上所述,此设置适用于除HTTP状态404之外的所有异常。任何想法是什么机制创建这些页面以及为什么我的异常解析器没有被调用?这是在Spring Boot 1.2.5.RELEASE上使用Spring MVC 4.1.7.RELEASE和嵌入式Tomcat 8.0.23

1 个答案:

答案 0 :(得分:1)

事实证明,我找到了答案。通过Spring配置是不可能的,但您可以创建自己的ServletDispatcher并对其进行配置以按照此处所述进行转换:How to configure default DispatcherServlet?

然后我的上面的代码很好地捕获404s