1. 介绍Spring 6是一个非常强大的框架,它提供了许多工具和接口来简化远程接口调用 。其中,WebClient、RestTemplate、HTTP Interface和RestClient是四种方式 。
WebClient是Spring 5中新引入的一个接口基于响应式,它提供了一种更简单、更灵活的方式来调用远程接口 。与RestTemplate相比,WebClient更加现代化,具有更好的性能和更低的内存占用 。
RestTemplate是Spring 3中引入的一个接口,它提供了一种更加简单、更加直观的方式来调用远程接口 。虽然WebClient是更现代化的选择,但RestTemplate仍然是一种常用的远程接口调用方式 。
HTTP Interface将 HTTP 服务定义为一个 JAVA 接口,其中包含用于 HTTP 交换的注解方法 。然后 , 你可以生成一个实现该接口并执行交换的代理 。这有助于简化 HTTP 远程访问,因为远程访问通常需要使用一个门面来封装使用底层 HTTP 客户端的细节 。
RestClient是一个同步 HTTP 客户端,提供现代、流畅的 API 。它为 HTTP 库提供了一个抽象 , 可以方便地从 Java 对象转换为 HTTP 请求,并从 HTTP 响应创建对象 。
下面分别介绍4个REST接口调用的详细使用 。
2. 远程接口调用RestTemplateRestTemplate 提供了比 HTTP 客户端库更高级别的 API 。它使调用 REST 端点变得简单易行 。它公开了以下几组重载方法:
描述
getForObject
通过GET检索数据 。
getForEntity
使用 GET 获取响应实体(即状态、标头和正文) 。
headForHeaders
使用 HEAD 读取资源的所有标头 。
postForLocation
使用 POST 创建新资源,并从响应中返回位置标头 。
postForObject
使用 POST 创建一个新资源 , 并从响应中返回描述 。
postForEntity
使用 POST 创建一个新资源 , 并从响应中返回描述 。
put
使用 PUT 创建或更新资源 。
patchForObject
使用 PATCH 更新资源,并返回响应中的描述 。请注意 , JDK HttpURLConnection 不支持 PATCH,但 Apache HttpComponents 和其他组件支持 。
delete
使用 DELETE 删除指定 URI 上的资源 。
optionsForAllow
通过 ALLOW 读取资源允许使用的 HTTP 方法 。
exchange
前述方法的更通用(更少意见)版本,可在需要时提供额外的灵活性 。它接受一个 RequestEntity(包括作为输入的 HTTP 方法、URL、标题和正文) , 并返回一个 ResponseEntity 。
这些方法允许使用参数化类型引用(ParameterizedTypeReference)而不是类(Class)来指定具有泛型的响应类型 。
execute
执行请求的最通用方式,可通过回调接口完全控制请求准备和响应提取 。
- 初始化
RestTemplate template = new RestTemplate(new HttpComponentsClientHttpRequestFactory());每个 ClientHttpRequestFactory 都会公开底层 HTTP 客户端库的特定配置选项 , 例如,凭证、连接池和其他细节 。- URIs
String result = restTemplate.getForObject("http://pack.com/users/{userId}", String.class, 666) ;Map<String, ?>方式:Map<String, Object> params = Collections.singletonMap("userId", 666);String result = restTemplate.getForObject("http://pack.com/users/{userId}", String.class, params) ;- Headers
String uriTemplate = "http://pack.com/users/{userId}";URI uri = UriComponentsBuilder.fromUriString(uriTemplate).build(42);RequestEntity<Void> requestEntity = RequestEntity.get(uri).header("x-api-token", "aabbcc").build() ;ResponseEntity<String> response = template.exchange(requestEntity, String.class);String responseHeader = response.getHeaders().getFirst("x-version");String body = response.getBody() ;- body
推荐阅读
- 再有人问你数据库连接池 Druid 的原理,这篇文章甩给他!
- 聊聊分布式数据库TDSQL的技术架构
- 2024年影响安全领域的五大技术趋势
- 互联网大厂是如何设计和使用缓存的?方案已开源!
- NAT协议的实现方式
- 一个GPT的幽灵在Gemini上空徘徊
- 搜索引擎如何判定网站的价值
- 为什么有的网站不更新文章也有很好的排名?
- TikTok独特的短视频美学探究
- 外国人喜欢什么?看看他们的网红就知道了!
