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

如何不阻塞地渲染包含两个Flux/Mono字段的响应式对象?

问题根因

你直接将Mono响应式对象本身赋值给GraphDataDTO的属性,JSON序列化框架无法感知响应式类型,只会序列化Mono实例本身的内部字段,才会出现scanAvailable这类异常字段,并非响应提前返回,而是你没有正确取出Mono包裹的实际业务数据。你之前使用zip不符合预期大概率是用法错误,没有将组合后的Mono作为整体返回,而是提前提取或者赋值到POJO属性中导致的。

非阻塞实现方案

使用Mono.zip组合两个异步请求的结果,直接返回组装后的Mono<GraphDataDTO>即可,Spring WebFlux 会自动等待响应流完成后再序列化返回结果,全程保持非阻塞:

// 组合两个Mono的执行结果,两个请求会并行执行
Mono<GraphDataDTO> graphDataDTOMono = Mono.zip(nodeDTOFlux, edgeDTOFlux)
        .map(tuple2 -> {
            GraphDataDTO graphDataDTO = new GraphDataDTO();
            // 取第一个Mono的结果 即List<NodeDTO>
            graphDataDTO.setNodeDTOS(tuple2.getT1());
            // 取第二个Mono的结果 即List<EdgeDTO>
            graphDataDTO.setEdgeDTOS(tuple2.getT2());
            return graphDataDTO;
        });
注意事项
  • Controller 层直接将上述Mono<GraphDataDTO>作为接口返回值即可,不要手动调用block()方法,否则会破坏非阻塞特性,造成线程阻塞。
  • 如果需要在业务层进一步处理组装后的GraphDataDTO,继续在响应流上使用map/flatMap等操作符链式处理即可,无需提前取出结果。

内容的提问来源于stack exchange,提问作者Maroua Briki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 15:24:05