当前位置: 首页 > 知识库问答 >
问题:

如何从第一次调用的列表中链接每个项目的webclient调用

向苗宣
2023-03-14

我有两个目标

CarParts {
    String   id
    WorkItem workItem
}

WorkItemResponse {
    List<WorkItem> resource; <- always contains one item.
}

我想在汽车零件上创建一个webclient,它将返回给我一个Mono

我也想做一个

Mono<List<Carparts>> carpartsmono = webclient.get.exchange();

Mono<WorkItemResponse> itemResponse = webclient.get().uri( item.id of carparts)

carpartsMono.flatmap(item -> item.stream().map(t -> t.setWorkItem(webclient.get("uri + 
     t.getId)).block().getResource().get(0)).collect(Collectors.AsList));

但是我找不到解决办法。


共有1个答案

刁俊人
2023-03-14

在反应式堆栈中,应尝试使所有代码异步,在您的情况下,其中一种方式如下所示:

Flux<CarPart> carPartFlux=
    webClient.get()
    .uri("/car-parts/{id}")
    .exchange()
    .bodyToFlux(CarParts.class)
    .map(carPart ->  {
        return
        webclient.get()
                 .uri("/workitems/" + cartPart.getWorkItemId())
                 .exchange()
                 .bodyToMono(WorkItemResponse.class)
                 .map(workitem ->  {
                      carPart.setWorkItem(workitem);
                      return carPart;
                 });
                 
    });

现在你可以通过汽车零件的测试了。请尽量避免。尽可能长的阻止调用。若要将其发送到RESTAPI客户端,则直接在RESTAPI响应中传递carPartMono。

上面的代码也是示例,可以根据当前的执行条件进一步改进。比如缓存可以帮助。因此,您可以从这个开始,监控性能并采取下一步措施。

 类似资料:
  • 问题内容: 我有表,我想将它做成。我该怎么办? 问题答案: Python清单 list.pop(索引) 删除列表[索引] 这些都将修改您的原始列表。 其他人建议使用切片: 复制清单 可以返回一个子集 另外,如果要执行许多pop(0),则应查看collections.deque 从列表的左端提供更高的性能

  • 问题内容: 鉴于: 我想删除第一个项目中的那个项目。因此,在这种情况下,我们将删除以: 我当前的代码是: 这可行,但是很慢。什么是更好的方法呢? 编辑:我之前没有测试过性能,所以我可能做错了,但是我得到了: 问题答案: 反向删除,就地修改: 就地修改意味着这样做效率更高,因为它不会创建新列表(如列表理解那样)。 由于OP要求提供高效的解决方案,因此这里比较了两个投票最高的答案。 设定 - 清单理解

  • 我正在使用webClient调用endpoint并希望将我得到的响应映射到另一个对象。在映射该对象时,我想对响应的某些参数进行额外调用。 我的第一个调用返回以下对象 我把这种反应描绘成这样: 在getCollectionContent方法中,我迭代设置数组,从响应中提取数据并将其映射到PageContent对象。 如果响应包含类型“String”,我只需将数据添加到消息对象中,并将其添加到页面内容

  • 我试图使用WebClient实现以下场景。使用RestTemplate很琐碎,但我再也做不到了。

  • 问题内容: 假设我有一个数组/要比较的事物列表。在我更熟悉的语言中,我会做类似的事情 这样可以确保我们只比较每对一次。在某些情况下,我正在对列表中包含的一堆对象进行碰撞检测。对于检测到的每个碰撞,将一个描述碰撞的小的“碰撞”对象添加到列表中,然后另一个例程循环循环以解决每个碰撞(取决于两个碰撞对象的性质)。显然,我只想报告每个碰撞一次。 现在,这样做的pythonic方式是什么,因为Python倾

  • 我使用改型2,我正在学习RxJava。我从某处下载了一个项目列表。我想对每个项目进行api调用,并创建扩展项目的新列表。两个调用都返回一个可观察的。它看起来像这样: 详细服务: } 问题是get细节返回一个可观察的,我不能用它来构造扩展项。在rxJava链中,更改get细节调用以返回对象不起作用,我猜是因为它将结果返回给主线程。如何获取对象本身?我尝试了很多其他的方法,但到目前为止都没有成功。