如何从第一次调用开始将 Web 客户端调用链接到列表中的每个项目



我有两个对象

CarParts {
String   id
WorkItem workItem
}
WorkItemResponse {
List<WorkItem> resource; <- always contains one item.
}

我想在汽车零件上创建一个 webclient,它会为列表中的每个项目返回一个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;
});

});

现在你可以通过汽车部分的单声道。请尽量避免 .block 调用。就像你把它发送到 rest api 客户端一样,你直接在 rest api 响应中传递 carPartMono。

上面的代码也是示例,可以根据当前的执行条件进一步改进。就像可以缓存帮助一样。因此,您可以从此开始并监视性能并采取后续步骤。

最新更新