mono.error()用于创建立即发出错误信号的mono,需传入继承throwable的自定义异常实例;推荐继承runtimeexception,可封装工具方法、结合onerrormap转换、添加上下文字段,并避免传null或构造耗时。

在 Java 的 Project Reactor 中,Mono.error() 是创建一个立即发出错误信号的 Mono 的标准方式。要包装自定义异常,核心是**传入一个继承自 Throwable 的实例**,通常是你自己定义的业务异常类。
1. 定义自定义异常类
确保你的异常类继承自 RuntimeException(非检查异常,适合响应式链中传播)或 Exception(若需强制处理)。推荐用运行时异常:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
public class BusinessException extends RuntimeException {
private final int errorCode;
public BusinessException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
}
public int getErrorCode() {
return errorCode;
}
}
2. 使用 Mono.error() 包装并发出
直接将自定义异常实例传给 Mono.error() 即可:
Mono<string> failingMono = Mono.error(
new BusinessException("用户不存在", 404)
);</string>
下游订阅者会收到该异常,可通过 onErrorResume、onErrorMap 或全局错误处理器捕获处理。
3. 常见增强用法
- 统一错误构造:封装成工具方法,避免重复 new
-
结合 onErrorMap 转换异常类型:例如把底层
IOException映射为BusinessException - 携带额外上下文:在自定义异常中添加 traceId、timestamp 等字段,便于日志追踪
4. 注意事项
- 不要传
null给Mono.error(),会抛出NullPointerException - 异常对象本身应尽量轻量,避免在构造时做耗时操作
- 若需延迟抛出(如根据条件判断),可用
Mono.defer(() -> condition ? Mono.just(...) : Mono.error(...))
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










