Spring mvc “如何拦截”;“全球”;404在spring boot中的嵌入式Tomcat上

Spring mvc “如何拦截”;“全球”;404在spring boot中的嵌入式Tomcat上,spring-mvc,tomcat,spring-boot,Spring Mvc,Tomcat,Spring Boot,我对spring boot附带的嵌入式tomcat有一个相当奇怪的问题,特别是它的错误处理 基本上,我试图通过自定义处理程序处理所有异常。 长话短说:它适用于除404以外的所有设备。这些是通过任何其他机制处理的,而不是例外情况 我使用call my custom Resolver测试的所有其他状态代码,只有404向我显示默认的Tomcat 404页面。更具体地说,404抛出到控制器之外,例如,如果只有用于/test注册的控制器,则请求/teXst。在这种异常情况下,我不会调用解析器,只会看到默认

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

基本上,我试图通过自定义处理程序处理所有异常。 长话短说:它适用于除404以外的所有设备。这些是通过任何其他机制处理的,而不是例外情况

我使用call my custom Resolver测试的所有其他状态代码,只有404向我显示默认的Tomcat 404页面。更具体地说,404抛出到控制器之外,例如,如果只有用于/test注册的控制器,则请求/teXst。在这种异常情况下,我不会调用解析器,只会看到默认的Tomcat HTTP状态404页面

知道什么会妨碍我吗? 下面是我如何设置解析器的

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
    }
为了让所有默认的Spring引导错误处理都不妨碍我用

@EnableAutoConfiguration(exclude = org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.class)
这就给我留下了404、500等的默认Tomcat错误页面,最后用

@Bean
public WebMvcConfigurerAdapter adapter() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
            exceptionResolvers.add(new GlobalExceptionResolver());
        }
@Bean
公共WebMVCConfigureAdapter适配器(){
返回新的WebMVCConfigureAdapter(){
@凌驾
public void configureHandlerExceptionResolver(列出ExceptionResolver){
添加(新的GlobalExceptionResolver());
}

如上所述,此设置适用于除HTTP状态404之外的所有异常。知道是什么机制创建这些页面以及为什么不调用我的异常解析程序吗?这是在Spring Boot 1.2.5.RELEASE上,使用Spring MVC 4.1.7.RELEASE和嵌入式Tomcat 8.0.23,我找到了答案。通过Spring配置是不可能的,但您可以创建自己的ServletDispatcher,并将其配置为trow异常,如下所述:

那么我上面的代码就可以捕捉404了