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

Spring WebFlux中如何正确返回Mono<Void>而非Mono<Object>

解决Spring WebFlux中阻塞无返回值代码包装为Mono的问题

你的问题出在Mono.fromCallable的类型推断上:fromCallable要求返回一个具体类型的值,哪怕你返回null,Reactor也会把这个Mono的类型推断为Mono<Object>,和你声明的Mono<Void>不匹配,所以报错。

有两种简单的解决方式:

方式一:用Mono.fromRunnable替代fromCallable

fromRunnable专门用于包装无返回值的任务,它天然返回Mono<Void>,完全符合你的需求:

public Mono<Void> wrappingFunction(String param) {
    return Mono.fromRunnable(() -> {
        // 执行你的阻塞操作
    }).subscribeOn(Schedulers.boundedElastic());
}

方式二:在fromCallable后追加then()方法

如果你坚持要用fromCallable,可以调用then()方法忽略返回值,将Mono<Object>转换为Mono<Void>:

public Mono<Void> wrappingFunction(String param) {
    return Mono.fromCallable(() -> {
        // 执行你的阻塞操作
        return null;
    }).subscribeOn(Schedulers.boundedElastic())
      .then();
}

两种方式都能满足你包装阻塞无返回值代码、返回Mono<Void>的需求,推荐第一种,因为它更贴合无返回值任务的语义。

内容的提问来源于stack exchange,提问作者Gopikrishna K S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:01