使用 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();
我有网址列表。我正在尝试使用来自 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();