Spring 如何从第一次调用的列表中链接每个项目的webclient调用
我有两个目标Spring 如何从第一次调用的列表中链接每个项目的webclient调用,spring,webclient,spring-webflux,project-reactor,Spring,Webclient,Spring Webflux,Project Reactor,我有两个目标 CarParts { String id WorkItem workItem } WorkItemResponse { List<WorkItem> resource; <- always contains one item. } 但我找不到解决方案。在反应式堆栈中,应尝试使所有代码异步,在您的情况下,其中一种方法如下所示: Flux<CarPart> carPartFlux= webClient.get()
CarParts {
String id
WorkItem workItem
}
WorkItemResponse {
List<WorkItem> resource; <- always contains one item.
}
但我找不到解决方案。在反应式堆栈中,应尝试使所有代码异步,在您的情况下,其中一种方法如下所示:
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;
});
});
Flux-carPartFlux=
webClient.get()
.uri(“/car parts/{id}”)
.exchange()
.bodyToFlux(CarParts.class)
.map(carPart->{
返回
webclient.get()
.uri(“/workitems/”+cartPart.getWorkItemId())
.exchange()
.BodyToNo(WorkItemResponse.class)
.map(工作项->{
carPart.setWorkItem(workitem);
返回卡帕特;
});
});
现在你可以通过汽车零件的测试了。请尽量避免。尽可能长时间阻止呼叫。若要将其发送到RESTAPI客户端,则直接在RESTAPI响应中传递carPartMono
上面的代码也是示例,可以根据当前的执行条件进一步改进。比如缓存可以帮助你。因此,您可以从这一点开始,监视性能并采取下一步行动。在反应式堆栈中,应该尝试使所有代码异步,在您的情况下,下面显示了一种方法:
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;
});
});
Flux-carPartFlux=
webClient.get()
.uri(“/car parts/{id}”)
.exchange()
.bodyToFlux(CarParts.class)
.map(carPart->{
返回
webclient.get()
.uri(“/workitems/”+cartPart.getWorkItemId())
.exchange()
.BodyToNo(WorkItemResponse.class)
.map(工作项->{
carPart.setWorkItem(workitem);
返回卡帕特;
});
});
现在你可以通过汽车零件的测试了。请尽量避免。尽可能长时间阻止呼叫。若要将其发送到RESTAPI客户端,则直接在RESTAPI响应中传递carPartMono
上面的代码也是示例,可以根据当前的执行条件进一步改进。比如缓存可以帮助你。因此,您可以从这个开始,监视性能并采取下一步。.exchange().bodytomino(CarParts.class)<返回Mono-Oh如果输入是list,则可以使用bodyToFlux将list转换为string,然后映射每个字符串。我已经更新了上面的答案..exchange().bodytomino(CarParts.class)<返回Mono-Oh如果输入是list,那么您可以使用bodyToFlux将list转换为字符串,然后映射每个字符串。我已经更新了上面的答案。