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

Micronaut 3 集成 Project Reactor 时全局异常处理器无法调用问题

问题根因

Micronaut 3.x版本对不同响应式实现的异常处理逻辑做了拆分,原有适配RxJava3的同步异常处理器,默认不会捕获Reactor流内抛出的自定义异常,核心原因有两个:

  • 缺少Reactor适配依赖,Micronaut路由层无法正确识别Reactor流内的错误信号
  • 原有异常处理器优先级低于系统默认的Reactor异常处理器,自定义逻辑被覆盖
解决方案

步骤1:添加Reactor官方适配依赖

Gradle配置:

implementation("io.micronaut.reactor:micronaut-reactor")

Maven配置:

<dependency>
    <groupId>io.micronaut.reactor</groupId>
    <artifactId>micronaut-reactor</artifactId>
</dependency>

该依赖会自动注册Reactor类型的信号处理器,把流内错误转发到全局异常处理链。

步骤2:调整自定义异常处理器优先级

给GlobalExceptionHandler添加最高优先级注解,避免被系统默认处理器覆盖,修正后代码如下:

import io.micronaut.core.annotation.Order;
import io.micronaut.core.order.Ordered;

@Produces
@Singleton
@Order(Ordered.HIGHEST_PRECEDENCE)
@Requires(classes = {GlobalException.class, ExceptionHandler.class})
public class GlobalExceptionHandler implements ExceptionHandler<GlobalException, HttpResponse> {
    private static final Logger LOG = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    @Override
    public HttpResponse handle(HttpRequest request, GlobalException exception) {
        LOG.error(exception.getLocalizedMessage());
        LOG.error(exception.getCause().getMessage());
        Arrays.stream(exception.getStackTrace()).forEach(item -> LOG.error(item.toString()));
        return HttpResponse.serverError(exception.getLocalizedMessage());
    }
}

提示:请确保GlobalExceptionHandler所在的包在Micronaut的组件扫描路径下,通常放在启动类同级或者子包即可被自动识别。

可选:异常触发逻辑校验

如果调整后仍不生效,可在onErrorMap中添加日志,确认异常转换逻辑正常执行:

@Override
public Flux<FindProductCommand> get(ProductSearchCriteriaCommand searchCriteria) {
    LOG.info("Controller --> Finding all the products");
    return iProductManager.find(searchCriteria).onErrorMap(throwable -> {
        LOG.info("触发异常转换,原异常类型:{}", throwable.getClass().getName());
        return new GlobalException(throwable);
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:48:05