什么是 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 客户端,支持同步/异步、链式调用和丰富扩展,是微服务、现代后端项目的主流选择。

你可能感兴趣的:(什么是 WebClient?)