如何在第一次调用时将 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。
以上代码也是示例,可以进一步改进,具体取决于当前的执行条件。缓存可以提供帮助。因此,您可以从此开始并监控性能并采取后续步骤。
我有两个对象
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。
以上代码也是示例,可以进一步改进,具体取决于当前的执行条件。缓存可以提供帮助。因此,您可以从此开始并监控性能并采取后续步骤。