Flux<Object>无法转换为Flux<BOLCompliance>报错如何解决
报错根因
- 你的
createComplianceResponse方法返回值为Mono<BOLCompliance>类型,原代码使用map操作符处理上游元素时,会直接把每个Compliance对象转换为一个Mono<BOLCompliance>对象,最终整个流的类型变成Flux<Mono<BOLCompliance>>,和方法要求返回的Flux<BOLCompliance>类型不匹配,因此触发类型转换报错。
修复方案
将代码最后一行的map操作符替换为flatMap即可。flatMap会自动展开内部的Mono发布者,把Mono发射的BOLCompliance元素直接放到外层流中,最终得到符合返回值要求的Flux<BOLCompliance>类型。
修复后代码如下:
private Flux<BOLCompliance> getComplienceRouteLink(BOLRouteLink routeLink, BillOfLadingResponse bol) { return Mono.justOrEmpty(routeLink.getComplianceIds()) .flatMapMany(Flux::fromIterable) .flatMap(id -> complianceCaller.getComplianceById(id)) .flatMap(compliance -> createComplianceResponse(compliance, bol)); }
补充说明
- 若
routeLink.getComplianceIds()返回null,Mono.justOrEmpty会直接返回空Mono,后续操作不会执行,最终返回空Flux,符合空合规ID列表的处理预期。 flatMap本身支持异步非阻塞处理,和原逻辑的响应式编程范式完全兼容,不会改动原有业务逻辑的执行效果。
内容的提问来源于stack exchange,提问作者Mira Devi
相关产品推荐
相关产品推荐

