> 技术文档 > RestClient 功能介绍、完整使用示例演示, 和RestTemplate、WebClient 对比_java restclient

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


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,但不建议长期维护。