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

如何在Reactive Java中捕获库方法运行时异常并包装自定义异常

解决方案

你的核心问题是要同时处理fetchInfoFromRemoteHost方法同步抛出的运行时异常和其返回Mono中包含的异步错误,并将这些异常统一包装为自定义异常。你的伪代码思路方向是对的,但需要补充关键步骤来捕获同步异常,具体实现如下:

正确代码示例

Mono.defer(() -> remoteHelper.fetchInfoFromRemoteHost(authToken))
    .onErrorMap(throwable -> new CustomException(throwable))
    .flatMap(response -> {
        // 这里编写处理响应的业务逻辑
        return Mono.just(processedResponse); // 示例:返回处理后的结果
    });

关键细节说明

  • 用Mono.defer包裹方法调用:
    第三方方法如果在调用时直接抛出同步异常(而非返回包含错误的Mono),这种异常不会被普通的onError系列操作符捕获。Mono.defer会延迟执行方法调用直到流被订阅的时刻,此时同步抛出的异常会被自动捕获并转化为Mono的错误信号,确保后续的错误处理逻辑能覆盖到这种场景。

  • 使用onErrorMap转换异常:
    这个操作符专门用于将流中的异常类型转换为另一种异常,是处理“异常包装”场景最简洁的方式。它接收一个函数,输入原始异常,输出你定义的CustomException,既处理同步抛出的异常,也处理Mono中包含的异步错误。

如果需要给自定义异常添加额外信息(比如错误描述),可以调整为:

.onErrorMap(throwable -> new CustomException("远程服务调用失败", throwable))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:20:39