使用 webclient 使用外部 api

Consuming external api using webclient

我有网址列表。我正在尝试使用来自 api 的 jsondata。下面是我试过的代码,但我得到 Mono.flatMapMany-> 在 org.springframework.web.reactive.function.client.DefaultWebClient$DefaultResponseSpec.bodyToFlux(DefaultWebClient.java:554)

如果我使用 .block(),我会得到那些 api 的 jsonData,但问题是当我使用 .block() 时它会变得同步。我希望它是异步的。谁能帮帮我。

提前致谢。

List<String> urls=getUrls();
Flux<String> k=null;
for(int i=0;i<urls.size();i++){
    k=webClientBuilder.
      build.get().
      uri(urls.get(i)).retrieve().
      bodyToFlux(String.class);
}

您提供的代码片段存在一些问题,因此我建议您首先通读 project reactor reference documentation

下面的代码片段有望实现您的需求。尽管如果希望 运行 this 作为反应管道的一部分,您将希望 return 来自此方法的 Flux 而不是订阅。底层框架(spring 在这种情况下启动)将启动订阅。

        List<String> urls = Arrays.asList("https://google.com", "https://yahoo.com");
        WebClient webClient = WebClient.builder().build();

        Flux.fromStream(urls.stream())
                .flatMap(url -> webClient.get()
                        .uri(url)
                        .retrieve()
                        .bodyToMono(String.class))
                .doOnNext(s -> System.out.println("Response: " + s))
                .subscribe();