You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot:如何不使用block()通过WebClient实现依赖API调用

解决方案

首先修正你代码里的几个语法和逻辑问题:

  • 方法定义缺少括号(getToken()、getData())
  • getToken()的bodyToMono应指定为GetToken.class而非Object.class,才能正确映射返回结果
  • getData()的返回类型应为Mono<Object2>而非Mono<GetToken>,与实际返回的响应类型匹配

接下来,利用Reactor响应式框架中的flatMap操作符,就能实现无阻塞的链式调用——它会在第一个异步请求(获取Token)完成后,自动将结果传入第二个请求:

// 修正后的获取Token方法
public Mono<GetToken> getToken() {
    return webClient
            .get()
            .uri(uriBuilder -> uriBuilder.path("api/getToken").build())
            .retrieve()
            .bodyToMono(GetToken.class);
}

// 接收Token参数的数据查询方法
public Mono<Object2> getData(String tokenID) {
    return webClient
            .get()
            .uri(uriBuilder -> uriBuilder.path("api/getData/" + tokenID).build())
            .retrieve()
            .bodyToMono(Object2.class);
}

// 整合两次请求的链式逻辑
public Mono<Object2> fetchDataWithToken() {
    return getToken()
            .flatMap(token -> getData(token.getTokenID()));
}

核心逻辑说明:

  • flatMap是响应式编程中处理异步依赖的核心操作符,它会订阅第一个Mono(获取Token的请求),当该请求成功返回结果后,自动将Token传入getData方法发起第二个请求,最终返回封装了数据查询结果的Mono<Object2>
  • 整个流程全程异步非阻塞,完全遵循Reactor的响应式编程模型,不需要通过block()阻塞线程来同步获取结果

内容的提问来源于stack exchange,提问作者Felipe Ferro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:30:51