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
相关产品推荐
相关产品推荐

