首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Spring Boot 3.2:将 RestTemplate 替换为 RestClient

  • 24-12-16 16:06
  • 3478
  • 8534
juejin.cn

Spring Boot 3.2 教程探讨了基于 WebClient 构建的名为 RestClient 的附加功能,这是一种更直观、更现代的使用 RESTful 服务的方法。

在Spring Boot的世界里,向外部服务发出HTTP请求是一项常见的任务。传统上,开发人员依赖RestTemplate来实现这一目的。然而,随着Spring Framework的发展,出现了一种新的、更强大的处理HTTP请求的方法:WebClient。在Spring Boot 3.2中,一个名为RestClient的新添加构建在WebClient之上,为消费RESTful服务提供了一种更直观、更现代的方法。

RestTemplate 的起源

RestTemplate多年来一直是Spring生态系统中的主要内容。它是一个用于发出HTTP请求和处理响应的同步客户端。有了RestTemplate,开发人员可以使用熟悉的Java语法轻松地与RESTful API交互。然而,随着应用程序变得更加异步和无阻塞,RestTemplate的局限性开始变得明显。

以下是使用RestTemplate从外部API获取数据的基本示例:

ini
代码解读
复制代码
var restTemplate = new RestTemplate(); var response = restTemplate.getForObject("https://api.example.com/data", String.class); System.out.println(response);

WebClient 简介

随着Spring WebFlux(一种异步、无阻塞的web框架)的出现,WebClient被引入作为RestTemplate的现代替代方案。WebClient采用反应式原理,非常适合构建反应式应用程序。它提供了对同步和异步通信的支持,以及用于编写请求的流畅的API。

以下是如何使用WebClient来实现相同的HTTP请求:

ini
代码解读
复制代码
var webClient = WebClient.create(); var response = webClient.get() .uri("https://api.example.com/data") .retrieve() .bodyToMono(String.class); response.subscribe(System.out::println);

在 Spring Boot 3.2 中输入 RestClient

Spring Boot 3.2引入了RestClient,这是一个建立在WebClient之上的更高级抽象。RestClient通过提供更直观流畅的API并减少样板文件代码,进一步简化了HTTP请求的生成过程。它保留了WebClient的所有功能,同时提供了一个对开发人员更友好的界面。

让我们来看看如何使用RestClient:

scss
代码解读
复制代码
var response = restClient .get() .uri(cepURL) .retrieve() .toEntity(String.class); System.out.println(response.getBody());

有了RestClient,代码变得更加简洁易读。RestClient在内部处理WebClient实例的创建,消除了设置和管理HTTP客户端的复杂性。

比较 RestClient 和 RestTemplate

让我们通过观察一些常见的场景来比较RestClient和RestTemplate:

RestTemplate:

ini
代码解读
复制代码
var response = new RestTemplate();

RestClient:

ini
代码解读
复制代码
var response = RestClient.create();

或者我们也可以使用我们的旧RestTemplate:

ini
代码解读
复制代码
var myOldRestTemplate = new RestTemplate(); var response = RestClient.builder(myOldRestTemplate);

GET Request

RestTemplate:

ini
代码解读
复制代码
var response = restTemplate.getForObject("https://api.example.com/data", String.class);

RestClient:

scss
代码解读
复制代码
var response = restClient .get() .uri(cepURL) .retrieve() .toEntity(String.class);

POST Request

RestTemplate:

arduino
代码解读
复制代码
ResponseEntity<String> response = restTemplate.postForEntity("https://api.example.com/data", request, String.class);

RestClient:

scss
代码解读
复制代码
var response = restClient .post() .uri("https://api.example.com/data") .body(request) .retrieve() .toEntity(String.class);

错误处理

RestTemplate:

dart
代码解读
复制代码
try { String response = restTemplate.getForObject("https://api.example.com/data", String.class); } catch (RestClientException ex) { // Handle exception }

RestClient:

vbscript
代码解读
复制代码
String request = restClient.get() .uri("https://api.example.com/this-url-does-not-exist") .retrieve() .onStatus(HttpStatusCode::is4xxClientError, (request, response) -> { throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders()) }) .body(String.class);

如这些示例所示,与RestTemplate相比,RestClient提供了一种更精简的HTTP请求生成方法。

Spring 文档为我们提供了许多其他示例。

结论

在Spring Boot 3.2中,RestClient作为RestTemplate的现代替代品出现,提供了一种更直观、更简洁的方式来使用RESTful服务。RestClient建立在WebClient之上,它采用响应式原则,同时简化了HTTP请求的处理过程。

开发人员现在可以在其Spring Boot应用程序中与外部API交互时,享受更高的生产力和更干净的代码。建议从RestTemplate过渡到RestClient,以获得更高效且经得起未来考验的代码库。

注:本文转载自juejin.cn的李憨憨的文章"https://juejin.cn/post/7448836807603175458"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top