java - 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。
谢谢
解决方案
我是这样做的:
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
)
推荐阅读
- python - 我的操作系统无法使用 Conda 包
- regex - 如何在 Vim 中使用正则表达式搜索遵循多行模式的字符串?
- c# - WPF绑定怪异
- javascript - 如何在 selenium webdriver 中使用 JSON 结果
- java - 如何从 ProgressBar 获取秒数
- sql - 在某些条件下选择出现多次的记录
- mysql - Laravel Eloquent 相当于 MYSQL IN
- python - 如何将列表中的第一个元素从字符串更改为日期格式?
- swift - 停止录制视频后调用委托方法
- facebook-graph-api - Instagram 帖子的视频链接来自分享网址