You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Reactive Java应用@RestControllerAdvice不生效问题咨询

Spring Boot Reactive 全局异常处理器未触发排查方案

常见原因及解决方法

  • 全局异常处理器未被Spring容器扫描到
    确认RestExceptionHandler类所在的包路径在Spring Boot启动类的默认扫描范围内(即启动类所在包及其子包),如果不在需要在启动类上通过@ComponentScan注解手动配置扫描路径。可以在RestExceptionHandler类中添加@PostConstruct注解的初始化方法打印日志,确认类是否被成功加载。
  • 异常未封装到反应式流的错误信号中
    WebFlux的全局异常处理器仅能捕获反应式流管道中传播的异常,必须通过return Mono.error(new RequestValidationException("提示信息"))或者return Flux.error(...)的方式抛出异常。如果是在反应式流外的独立线程、普通工具类中直接throw new RequestValidationException(),异常不会被反应式上下文捕获,也就无法触发全局异常处理。
  • 自定义异常被上层操作符拦截转换
    检查抛出异常的上游链路是否使用了onErrorResume、onErrorContinue、doOnError等操作符捕获了异常,没有向下游传递;或者是否存在AOP切面、全局拦截器将RequestValidationException转换成了其他类型的异常,导致@ExceptionHandler的类型匹配失败。可以临时在全局异常处理器中添加一个处理Exception.class的通用方法,打印捕获到的异常类型,确认是否发生了类型转换。
  • 自定义ErrorWebExceptionHandler覆盖了默认处理逻辑
    如果你项目中自定义实现了ErrorWebExceptionHandler接口,并且设置了更高的优先级(比如添加了@Order(Ordered.HIGHEST_PRECEDENCE)注解),会优先走自定义的异常处理逻辑,导致@RestControllerAdvice标注的全局异常处理器失效。可以临时注释掉自定义的ErrorWebExceptionHandler实现验证是否是该原因导致。
  • 异常在过滤器链中抛出未到Controller层
    @RestControllerAdvice仅处理Controller层抛出的异常,如果你的异常是在WebFilter、Spring Security过滤器链等前置链路中抛出的,不会被该处理器捕获,需要在对应过滤器的异常处理逻辑中自行处理。
  • 注解导包错误
    确认@RestControllerAdvice、@ExceptionHandler、@ResponseStatus等注解都是导入的org.springframework.web.bind.annotation包下的对应类,导错包会导致注解不生效。

内容的提问来源于stack exchange,提问作者nehacharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:54:01