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

Spring Boot中使用WebClient发起异步请求后如何将响应数据传递到HTML视图

问题原因

你现有写法的核心问题是:手动调用subscribe触发异步请求后直接返回视图名,此时WebClient的异步请求还未执行完成,视图已经提前渲染,回调里拿到的响应数据自然没法传入渲染流程。

解决方案

Spring MVC 原生支持 Controller 方法返回 Reactive 类型(Mono/Flux),框架会自动等待异步任务完成后再执行视图渲染逻辑,不需要手动处理异步回调。

改造后的代码示例

@Controller
@RequiredArgsConstructor
public class HomeController {

    private final WebClient.Builder webBuilder;

    @GetMapping("/")
    public String getHomepage() {
        return "homepage";
    }

    @GetMapping("/api")
    public Mono<String> getApiResponse(Model model) {
        return webBuilder.build()
                .get()
                .uri("https://api.github.com/users/microsoft/repos")
                .retrieve()
                .bodyToMono(String.class)
                // 请求成功时把数据放入Model,返回视图名
                .map(response -> {
                    model.addAttribute("githubRepos", response);
                    return "apitest";
                })
                // 可选:异常兜底逻辑,请求失败时返回错误视图
                .onErrorResume(e -> {
                    model.addAttribute("errorMsg", "接口请求失败:" + e.getMessage());
                    return Mono.just("error");
                });
    }
}
注意事项
  • 前端模板(如Thymeleaf)可以直接通过${githubRepos}读取Model中的数据,用法和同步接口完全一致。
  • 不要手动调用subscribe方法,把返回的Mono直接交给Spring框架管理生命周期即可,框架会自动处理异步等待、视图渲染的流程。
  • Spring Boot 2.x及以上版本默认支持该特性,无需额外引入依赖,如果你使用的是老版本,只需确保项目中已经引入Reactor相关依赖即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:36:00