完全禁用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的其他配置”的方法