java - Spring Boot - WebFlux 在并行运行时将结果的上下文与 id 保持一致
问题描述
使用 Spring Boot Web 客户端从 REST API 请求 JSON,来自服务器的响应正文存储在一个简单的Map
. 对服务器的请求包含一个 ID,但这不包含在响应中,但需要解释响应。
我想在并行调用的结果中包含 id ,而不是List<Map> data
应该Map<UUID,Map> data
或类似的。因此,来自服务器的响应与用于获取响应的 id 配对。
List<Map> data = Flux.fromIterable(ids)
.parallel()
.runOn(Schedulers.elastic())
.flatMap(this::callAPI).sequential().collectList().block();
private Mono<Map> callAPI(UUID id) {
return client.get().uri(uriBuilder -> uriBuilder
.path("/{id}/")
.build(id))
.retrieve().bodyToMono(Map.class);
}
解决方案
来自@ThomasAndolf 评论
通过不
Mono<Map>
从您的callApi
函数返回 a 。返回一个Map
和Id
包装对象,您可以稍后使用它重新映射到您想要的结构.bodyToMono(Map.class).flatMap(map -> { return Mono.just(new Response(id, map)); });
– Thomas Andolf 22 小时前
推荐阅读
- hyperledger-fabric - 如何将数据从一个超级账本结构网络迁移到另一个超级账本结构网络?
- php - Laravel 7:无法更新用户表中的记录
- flatbuffers - 查询模式和 JSON 数据转换
- javascript - Chartjs 在不禁用工具提示的情况下禁用悬停颜色更改
- xcode - clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用) Flutter 运行构建失败
- mysql - 如何更新 MySQL(AuroraDB) 中的多行?
- c# - 将未知数量的子节点加载到 TreeNode
- android - 无法在 recyclerview 中使用 glide 加载图像(recyclerview 的数据是使用改造来获取的)
- julia - 在 Julia 中将数据集拆分为训练和测试
- r - 在 ggplot2 中用其他类型的图绘制多个 wordcloud(ggwordcloud)