完全禁用Spring启动异常处理?

完全禁用Spring启动异常处理?,spring,spring-boot,Spring,Spring Boot,我真的厌倦了所有这些@ControllerAdvice、@ExceptionHandler、defaulthandleexceptionresolver、ErrorAttributes、白标签错误页面之类的东西 我希望在我的筛选链的第一个筛选中完全摆脱它并手动处理异常,如下所示: try { chain.doFilter() } catch (Exception e) { ... } 注意:我知道如何禁用白标错误页: @SpringBootApplication(exclude

我真的厌倦了所有这些
@ControllerAdvice、@ExceptionHandler、defaulthandleexceptionresolver、ErrorAttributes、白标签错误页面
之类的东西

我希望在我的筛选链的第一个筛选中完全摆脱它并手动处理异常,如下所示:

try {
    chain.doFilter()
} catch (Exception e) {
    ...
}
注意:我知道如何禁用
白标错误页

@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})
public class Application

但这不是我唯一想禁用的东西。我还想摆脱
DefaultHandlerExceptionResolver

大部分错误处理都是由
ErrorMvcAutoConfiguration
配置的。因此,您需要从应用程序中排除此自动配置:

通过注释:

@EnableAutoConfiguration(exclude = org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration)
或配置属性:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration
如果您使用的是反应式Spring,那么您需要排除
ErrorWebFluxAutoConfiguration

请记住,可能会有其他配置来配置其他错误bean,但这应该能解决大部分问题。您需要调试/逐步完成应用程序启动过程,以找出在哪里/什么配置了这些其他bean,并禁用该自动配置

从我的调试中,
@ControllerAdvice
@ExceptionHandler
DefaultHandlerExceptionResolver
得到引导,特别是方法

正如javadocs中所述:

另一个更高级的选项是直接从这个类扩展并根据需要重写方法,记住将@Configuration添加到子类中,将@Bean添加到重写的@Bean方法中。有关更多详细信息,请参阅@EnableWebMvc的javadoc

高级选项可能是您想要的,因为您希望完全控制Spring Boot提供的错误处理。因此,遵循javadoc的建议:

@Configuration
public class CustomWebMvcConfigurationSupport extends WebMvcConfigurationSupport {

    @Override
    protected void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
        // Define your custom resolvers here.
        // List must NOT be empty otherwise default resolves will kick in.
    }

    @Bean
    @Override
    public HandlerExceptionResolver handlerExceptionResolver(
            @Qualifier("mvcContentNegotiationManager") ContentNegotiationManager contentNegotiationManager) {
        // Or completely take control over the resolvers
        HandlerExceptionResolverComposite composite = new HandlerExceptionResolverComposite();
        composite.setOrder(0);
        composite.setExceptionResolvers(Collections.emptyList());
        return composite;
    }
}
@配置
公共类CustomWebMvcConfigurationSupport扩展了WebMvcConfigurationSupport{
@凌驾
受保护的void配置HandlerExceptionResolver(列出ExceptionResolver){
//在此处定义自定义解析程序。
//列表不能为空,否则默认解析将生效。
}
@豆子
@凌驾
公共句柄例外解析程序句柄例外解析程序(
@限定符(“mvcContentNegotiationManager”)ContentNegotiationManager ContentNegotiationManager){
//或者完全控制分解器
HandlerExceptionResolverComposite复合=新HandlerExceptionResolverComposite();
复合.setOrder(0);
composite.setExceptionResolver(Collections.emptyList());
收益组合;
}
}

但同样,如上所述,您需要调试/逐步完成应用程序启动过程,以找出要禁用的其他bean的位置/配置,并覆盖/禁用该配置。

可能重复@MounirMessaoudi我知道如何禁用白标签错误页,但这并不是我想要禁用的所有内容。谢谢,我知道
错误MVCAUTOConfiguration
。我正在寻找一种禁用“配置其他错误bean的其他配置”的方法