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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:57:02