⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 juejin.cn/post/7529035047552335907 「天天摸鱼的java工程师」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

近日,Spring 团队正式宣布:RestTemplate 将在 Spring Framework 7.0 中进入弃用计划,并在后续版本中逐步移除。

这意味着伴随开发者十余年的经典 HTTP 客户端,终于要走向历史舞台的终点。

即使升级了spring web 6.0.0版本,也无法在HttpRequestFactory中设置请求超时,这可能是放弃使用 RestTemplate 的最大因素之一。

时间表一览

  • Spring Framework 7.0(2025 年 11 月):宣布弃用计划。
  • Spring Framework 7.1(预计 2026 年 11 月):正式标记为 @Deprecated。
  • Spring Framework 8.0(时间待定):彻底移除 RestTemplate。

根据 Spring 的维护节奏,RestTemplate 的开源支持会延续到 至少 2029 年,开发者仍有充足的时间完成迁移。

RestTemplate 最早诞生于 Spring Framework 3.0(2009 年),至今已有 15 年历史。它的设计基于“模板式 API”(类似 JdbcTemplate、JmsTemplate),在当时为开发者带来了极大便利。但随着技术生态的发展,它逐渐暴露出以下局限:

1.API 扩展性差: 新功能需要通过方法重载实现,导致 Javadoc 和 IDE 自动补全中充斥大量重复方法,开发体验逐渐恶化。

2.异步支持不足: AsyncRestTemplate 曾试图解决,但依赖 ListenableFuture,在并发组合和资源管理上力不从心。

3.流式处理受限: RestTemplate 默认会读取并关闭整个响应,难以处理 SSE(Server-Sent Events)等流式协议。

4.无法拥抱现代 Java: 在虚拟线程(Virtual Threads)、结构化并发(Structured Concurrency)和 Reactive Streams 成为主流的今天,RestTemplate 的 API 模式已经无法适配。

在 Spring Framework 6.1 引入并不断完善的 RestClient,将取代 RestTemplate 成为传统(阻塞式)HTTP 客户端的首选。

与 RestTemplate 相比,RestClient 带来:

  • 现代化的 Fluent API:链式调用,方法更简洁,IDE 提示更精准。
  • API 版本控制:可通过请求头、路径、Query 参数等方式自动插入 API 版本。
  • 灵活的 HttpMessageConverters:更容易扩展和自定义消息转换器。
  • Http Interface Groups:支持批量配置多个 HTTP 接口客户端,减少重复代码。
  • RestTestClient:全新的测试客户端,替代 TestRestTemplate,支持集成测试与 Mock 测试统一。

对于已经在用 RestTemplate 的项目,Spring 提供了平滑迁移方案:RestClient 可以直接包装现有 RestTemplate 实例,让你逐步替换而不是“一刀切”。

另一方面,WebClient 依旧是 Reactive 编程场景下的首选 HTTP 客户端:

  • 支持异步、非阻塞调用。
  • 原生支持流式协议(如 SSE)。
  • 与 Reactor / WebFlux 完美结合。

未来的 Spring HTTP 客户端格局将非常清晰:

  • RestClient:适合大多数同步阻塞式应用。
  • WebClient:适合需要 Reactive、异步或流式处理的应用。

对于大多数企业级应用来说,这次调整意味着:

1.新项目:直接使用 RestClient 或 WebClient。

2.老项目:逐步迁移,先用 RestClient 包装 RestTemplate,再逐步替换。

3.测试场景:迁移到 RestTestClient,弃用 TestRestTemplate。

随着 Spring Boot 4.0 的模块化改造,开发者还可以直接通过:

  • spring-boot-starter-restclient
  • spring-boot-starter-webclient

来声明依赖,明确选择 HTTP 客户端类型。

文章目录
  1. 1. 时间表一览