Webflux使用groupBy分组无法获取嵌套子字段的正确实现代码
你现有Webflux代码只完成了按consignmentNumber分组的第一步,但没有对每个分组内的Dto元素进行归集,也没有执行你原有逻辑中负责组装consignmentItems嵌套字段的getMyData方法,自然无法返回嵌套子字段。
正确实现代码如下:
import java.util.AbstractMap; import reactor.core.publisher.Mono; import reactor.core.publisher.Flux; // 你的业务逻辑代码 public Mono<MyResponse> getConsignmentData(MyConsignmentRequest myConsignmentRequest) { // 1. 执行查询获取Dto流 Flux<MyConsignmentsDto> myDtos = myDao.fetchMyData(myConsignmentRequest); // 2. 分组+组装嵌套字段+归集结果 return myDtos // 按consignmentNumber分组 .groupBy(MyConsignmentsDto::getConsignmentNumber) // 处理每个分组:先归集该分组下所有Dto为列表,再调用原有逻辑组装嵌套字段 .flatMap(groupedFlux -> groupedFlux.collectList() .map(dtoList -> getMyData(new AbstractMap.SimpleEntry<>(groupedFlux.key(), dtoList))) ) // 归集所有组装完成的托运数据为列表 .collectList() // 组装到响应对象返回 .map(myDetails -> { MyResponse myResponse = new MyResponse(); myResponse.setMyConsignments(myDetails); return myResponse; }); }
注意事项
- 若你原有
getMyData方法是异步实现(返回Mono<MyConsignmentData>),将上述代码中处理分组时的map替换为flatMap即可 - 原有命令式逻辑中的非空判断无需手动实现,若查询结果为空,
collectList会自动返回空列表,不会触发空指针异常 - 若在Controller层使用,直接返回上述
Mono<MyResponse>对象即可,Webflux会自动完成序列化输出
内容的提问来源于stack exchange,提问作者user9976805
相关产品推荐
相关产品推荐

