激发这个问题的场景是Spring WebFlux的WebExceptionHandler
:
@Bean
@Order(-2)
public WebExceptionHandler exceptionHandler() {
return (exchange, ex) -> {
// Handle exceptions
};
}
在上面的代码示例中,我使用@Order
注解来确保我的异常处理程序优先于Spring WebFlux附带的DefaultErrorWebExceptionHandler
。这是一个有效的解决方案。@Primary
也是。然而,我真的不喜欢它们中的任何一个。
这背后的原因是,依赖基于顺序的功能来确保我的代码行为对我来说是不愉快的。我宁愿找到一种方法从Spring容器中排除DefaultErrorWebExceptionHandler
,这样我的实现就是唯一可用的WebExceptionHandler
。然而,DefaultErrorWebExceptionHandler
是由Spring自动连接的,我不知道任何排除它的方法。
我想知道有什么选择可以实现这一目标。
1条答案
按热度按时间unhi4e5o1#
Sping Boot 提供了默认值,可以排除或使用用户提供的bean。这是关键功能之一。
假设WebFlux ErrorExceptionHandler当前看起来是这样的,
你也可以
1.创建实现
ErrorWebExceptionHandler
而不是WebExceptionHandler
的Bean1.不包括
ErrorWebFluxAutoConfiguration.class
,它可以通过几种方式完成,但现在通常通过@SpringBootApplication(exclude = { ErrorWebFluxAutoConfiguration.class })
完成。