突发!Spring 宣布弃用 RestTemplate!!
大家好,我是R哥。
最近,Spring 官宣了一条重磅消息:
先扫盲一下,RestTemplate 是 Spring 框架提供的一个同步 HTTP 客户端工具类,简单易用,常用于在 Java 应用中发起 HTTP 请求,也用于微服务之间的调用。
为啥 RestTemplate 这么流行?
自从 2009 年 Spring 3.0 发布之后,RestTemplate 几乎成了 Java 开发者调用 HTTP 接口的标配。
使用 RestTemplate 的好处:
- 简单好用:封装了各种 HTTP 方法;
- 支持 POJO 映射:用 Jackson 自动把 JSON 转成 Java 对象;
- 统一异常处理:支持各种异常机制;
- 拦截器机制:支持请求/响应的拦截和改造;
- 高度集成 Spring 生态:能无缝地和 Spring 全家桶配合使用。
- ...
可以说,RestTemplate 就是 Java 传统 HTTP 调用的天花板。
从调用 RESTful API 到微服务通信,再到各种第三方平台的对接,哪里需要 HTTP 请求,哪里就有 RestTemplate 的身影。
但,现在时代变了……
为啥 Spring 要弃用 RestTemplate?
现在都 2025 年了,Java 的世界早已经大变样了。
你以为你还活在 Java 8 古董时代?
Spring 全家桶最低依赖早就安排上 Java 17 了,Java 21 的 Virtual Threads 虚拟线程都快飞起来了,最新的长期支持版本 Java 25 也发布了。
在 Spring 6.1 中,官方推出了新的 RestClient,在即将发布的 Spring 7.0 中,RestTemplate 将会被官方标记为弃用(Deprecated),并在 Spring 8.0 中彻底移除。
因为 RestTemplate 的 API 是模板式的:
restTemplate.getForObject();
restTemplate.postForEntity();
restTemplate.exchange();
这种调用方式虽然简单,但已经跟不上时代了:
- 方法重载太多,API 混乱;
- 无法支持异步和流式处理;
- 不支持(Streaming)流式响应;
- 不方便扩展新功能;
比如,像即将发布的 Spring 7.0 版本中要新出的 API 版本控制、HTTP 客户端分组等很多功能,大部分都在 RestTemplate 上实现不了。
RestTemplate 曾经是 Java HTTP 客户端的王者,但它的设计模式已经跟不上 Java 生态的变化,官方不忍心整体生态被它挺累,所以选择让它退休。
还真有点食之无味,弃之可惜的感觉。
WebClient 和 RestClient 横空出世
Spring 团队当然不是直接砍掉 RestTemplate,他们也备好了两套新东西:
- WebClient(Spring 5 引入)
- RestClient(Spring 6.1 引入)
WebClient 早就有了,是异步非阻塞的响应式 HTTP 客户端,而 RestClient 正是为了替代 RestTemplate 而设计的新的同步阻塞式 HTTP 客户端。
如下面的示例:
RestClient client = RestClient.builder()
.baseUrl("https://api.javastack.cn")
.build();
String result = client.get()
.uri("/v3/wx/conditions/current?city=shenzhen")
.retrieve()
.body(String.class);
RestClient 它也采用了一个现代化的 Fluent API 封装,继承了 RestTemplate 的稳定和同步风格,但避开了模板式 API 的局限。
RestClient 的使用实战代码已上传 Github:
RestTemplate 退休计划
RestTemplate 也不是立即弃用,这是 Spring 官方发布的退休计划:
Spring 版本 | 状态说明 |
---|---|
7.0(2025/11) | 官方博客和文档中声明弃用 RestTemplate |
7.1(2026/11) | 添加 @Deprecated 注解 |
8.0 | 移除 RestTemplate 相关代码 |
开源支持截止 | 至少维护到 2029 年 |
你现在用 RestTemplate 没问题,或许可以坚持到 2029 年,但至少要有个心理准备或者过渡计划。
RestClient 和 WebClient 是 Spring 新时代的产物,无论你是走常规路线,还是响应式路线,都是官方对应的主流解决方案。
所以,趁早迁移,避免将来手忙脚乱。
更重要的是,RestClient 和 WebClient 都是现代化的 Fluent API,用起来比老 API 爽多了,不香吗?
最后,RestTemplate,江湖再见;RestClient,未来已来!
好了,今天的分享就到这里了,后续R哥也会继续关注并分享更多的 Java 资讯和干货,关注我第一时间推送。
版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。