如何在第一次调用时将 webclient 调用链接到列表中的每个项目

How to chain a webclient call on each items from a list from the first call

我有两个对象

CarParts {
    String   id
    WorkItem workItem
}

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

我想在汽车零件上创建一个 Web 客户端,它将 return 为列表中的每个项目提供 Mono<List<CarParts>> 我想在第二次调用时使用该 ID,然后设置 Carparts 的每个 WorkItem 对象与第二次调用的结果

我也想做一个

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));

但我找不到解决方案。

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

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;
                 });
                 
    });

现在可以通过汽车部分的Mono了。请尽量避免 .block 调用。就像您将其发送给 rest api 客户端一样,您直接在 rest api 响应中传递 carPartMono。

以上代码也是示例,可以进一步改进,具体取决于当前的执行条件。缓存可以提供帮助。因此,您可以从此开始并监控性能并采取后续步骤。