我有两个对象
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。
上面的代码也是示例,可以根据当前的执行条件进一步改进。就像可以缓存帮助一样。因此,您可以从此开始并监视性能并采取后续步骤。