RestClient 功能介绍、完整使用示例演示, 和RestTemplate、WebClient 对比

RestClient功能介绍

RestClient是Spring Framework 6.1版本引入的同步HTTP客户端,旨在替代老旧的RestTemplate,提供更现代、流畅的API设计。其核心特点包括:

  1. 流畅API(Fluent API)
    支持链式调用,通过方法链接实现自然语言风格的代码,可读性更强[1][4]。

    RestClient.builder()
        .baseUrl("https://example.com")
        .defaultHeader("My-Header", "Foo")
        .build();
    
  2. 同步阻塞式通信
    RestTemplate类似,RestClient是同步客户端,适用于简单或低并发场景[1][4]。

  3. 高度可定制
    支持通过builder配置请求工厂、默认Header、拦截器、消息转换器等[1][7][9]。

  4. 异常处理
    默认对4xx/5xx状态码抛出异常,但可通过onStatus自定义处理逻辑[1][4]。

  5. 兼容RestTemplate
    可直接从RestTemplate实例创建RestClient,简化迁移[7]。


完整使用示例

1. 创建RestClient实例
RestClient customClient = RestClient.builder()
    .requestFactory(new HttpComponentsClientHttpRequestFactory()) // 使用Apache HTTP客户端
    .defaultHeader("My-Header", "Foo") // 全局默认Header
    .requestInterceptor(myCustomInterceptor) // 添加请求拦截器
    .build();
2. 发送GET请求
MyResponse response = customClient.get()
    .uri(URI.create("https://developers.ascendcorp.com")) // 设置URL
    .header("Correlation", correlationId) // 动态添加Header
    .retrieve() // 获取响应
    .onStatus(HttpStatusCode::is4xxClientError, (req, res) -> { // 处理4xx错误
        throw new MyCustomRuntimeException(res.statusCode(), res.headers());
    })
    .body(MyResponse.class); // 反序列化响应体
3. 发送POST请求
MyResponse response = customClient.post()
    .uri(URI.create("https://developers.ascendcorp.com")) // 设置URL
    .body(request) // 设置请求体(自动序列化JSON)
    .header("my-header-a", headerA) // 动态添加Header
    .header("my-header-b", headerB)
    .retrieve()
    .toEntity(MyResponse.class) // 获取响应实体
    .getBody();
4. 复杂响应处理(使用exchange
List<Article> articles = customClient.get()
    .uri("/articles")
    .exchange((request, response) -> {
        if (response.getStatusCode().is204()) {
            throw new ArticleNotFoundException();
        } else if (response.getStatusCode().is200()) {
            return objectMapper.readValue(response.getBody(), new TypeReference<>() {});
        } else {
            throw new InvalidArticleResponseException();
        }
    });

与RestTemplate、WebClient对比

特性 RestClient RestTemplate WebClient
API风格 流畅链式调用(Fluent API) 模板方法(重载方法多,复杂度高) 函数式、链式调用(响应式编程)
同步/异步 同步阻塞 同步阻塞 非阻塞、异步(基于Reactor)
适用场景 新项目优先,需现代API设计 现有项目维护,简单同步需求 高并发、响应式场景(如WebFlux)
性能 与RestTemplate相当(同步模型) 较低(同步阻塞) 高(非阻塞I/O,资源消耗低)
异常处理 支持自定义状态处理器(onStatus 需手动处理异常或使用ResponseErrorHandler 响应式错误处理(Mono/Flux)
依赖 Spring Framework 6.1+ Spring 3+ Spring WebFlux(响应式环境)

总结

  1. RestClient

    • 适用于新项目,尤其是Spring 6.1+环境,提供现代化API设计和同步操作。
    • 优势在于代码简洁、可读性强,且兼容RestTemplate的配置。
  2. RestTemplate

    • 适合旧项目维护或简单同步需求,但API复杂度高,建议逐步迁移至RestClient。
  3. WebClient

    • 高并发、响应式场景(如WebFlux)下的首选,支持非阻塞I/O和流式处理,但学习曲线较陡[3][9]。

选择建议

  • 新项目优先使用RestClient,淘汰RestTemplate
  • 高并发或响应式架构选择WebClient
  • 现有简单项目可继续使用RestTemplate,但不建议长期维护。

你可能感兴趣的:(RestClient 功能介绍、完整使用示例演示, 和RestTemplate、WebClient 对比)