什么是 WebClient?
WebClient 是 Spring WebFlux 提供的一个非阻塞、响应式的 HTTP 客户端,可以在异步和同步场景下发起 HTTP 请求,支持 RESTful API 调用,适用于微服务间通信、第三方接口访问等。
属于 Spring Framework 5 之后的标准组件
可以用于响应式应用(WebFlux),也可以用在普通 Spring Boot 项目
支持 GET、POST、PUT、DELETE 等全套 HTTP 操作
支持同步/异步、流式数据、超时、拦截、cookie 等高级特性
为什么推荐用 WebClient?
异步非阻塞:适合高并发、性能敏感场景
链式API:编码风格现代,使用更流畅
支持响应式流:天然支持 reactive 流编程(Flux/Mono)
配置灵活:更容易自定义 header、cookie、超时、代理等
官方推荐:RestTemplate 已停止进化,WebClient 作为新一代主推
基本用法(同步&异步)
1. 创建 WebClient 实例
// 一般推荐单例、注入
WebClient webClient = WebClient.create("http://localhost:8080");
或者 Spring Bean 注入方式:
@Bean
public WebClient.Builder webClientBuilder() {return WebClient.builder();
}
2. 发送 GET 请求(异步响应式)
webClient.get().uri("/api/user/1").retrieve().bodyToMono(User.class).subscribe(user -> {System.out.println("获取到用户:" + user);});
3. 同步阻塞式获取数据(和 RestTemplate 类似)
User user = webClient.get().uri("/api/user/1").retrieve().bodyToMono(User.class).block(); // block() 变同步,直到拿到结果
4. 发送 POST 请求
User user = new User("Tom");
User result = webClient.post().uri("/api/user").bodyValue(user).retrieve().bodyToMono(User.class).block();
进阶用法
自定义 Header/Token
webClient.get().uri("/api/user/1").header(HttpHeaders.AUTHORIZATION, "Bearer your_token").retrieve().bodyToMono(User.class);
并发/批量请求
利用 Flux/Mono 组合,批量请求,聚合响应,支持高性能异步处理。
适用场景
微服务间 HTTP 通信
调用第三方 RESTful API
高并发数据采集、抓取
需要响应式、非阻塞能力的服务(如 WebFlux)
总结
WebClient 是 Spring 5.x 以后推荐使用的响应式 HTTP 客户端,支持同步/异步、链式调用和丰富扩展,是微服务、现代后端项目的主流选择。