Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何从第一次调用的列表中链接每个项目的webclient调用_Spring_Webclient_Spring Webflux_Project Reactor - Fatal编程技术网

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转换为字符串,然后映射每个字符串。我已经更新了上面的答案。