首页 > 解决方案 > SpringBoot:如何使用响应式编程调用 API 链?

问题描述

我想在另一个 Flux 流中间调用一个 Mono,将 Flux 的参数发送到单声道。我正在使用 SpringBoot 的 WebClient。

我试过这个:

WebClient client = WebClient.create();
    client.get().uri("http://localhost:8081/api/{param1}", param1)
        .retrieve()
        .bodyToFlux(String.class)
        .zipWith(
            client.get().uri("http://localhost:8082/api/{param2}", param2)
            .retrieve()
            .bodyToMono(String.class);
        )
        .map(tuple -> {
          return tuple.getT1() + tuple.getT2();
        })

但是如何将第一个 API 调用的返回发送到 param2?然后得到双方的回应?第一个 API 返回许多值,对于每个值,我需要调用第二个 API。

谢谢

标签: javaspringspring-bootreactive-programming

解决方案


我是这样做的:

WebClient client = WebClient.create();
client.get().uri("http://localhost:8081/api/{param1}", param1)
    .retrieve()
    .bodyToFlux(String.class)
    .flatMap(
        response1 -> 
            client.get().uri("http://localhost:8082/api/{param2}", response1)
                .retrieve()
                .bodyToMono(String.class)
                .map(response2 -> new Response(response1, response2))
     )
     , Response.class
     )

推荐阅读