我有两个对象
CarParts {
String id
WorkItem workItem
}
WorkItemResponse {
List<WorkItem> resource; <- always contains one item.
}
我想在汽车零件上创建一个Webclient,它将Mono<List<CarParts>>
为列表中的每个项目返回a ,我想在第二次调用中使用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。
上面的代码也是示例,可以根据当前执行条件进行进一步改进。喜欢可以缓存帮助。因此,您可以从此开始并监视性能并采取后续步骤。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句