Spring6.1新特性,四种方式调用REST接口(RestClient、WebClient、RestTemplate、HTTP Interface)
无奈何杨 2024-09-05 11:33:01 阅读 90
个人博客:无奈何杨(wnhyang)
个人语雀:wnhyang
共享语雀:在线知识共享
Github:wnhyang - Overview
官网
REST Clients :: Spring Framework
The Spring Framework provides the following choices for making calls to REST endpoints:
RestClient - synchronous client with a fluent API.WebClient - non-blocking, reactive client with fluent API.RestTemplate - synchronous client with template method API.HTTP Interface - annotated interface with generated, dynamic proxy implementation.
RestClient
官方描述:<code>RestClient是一个同步HTTP
客户端,它提供了一个现代、流畅的API
。它提供了对HTTP
库的抽象,允许从Java
对象到HTTP
请求的方便转换,以及从HTTP
响应创建对象。
Spring6.1
版本新特性。
创建
创建RestClient
非常简单,可以使用静态create
方法,也可以使用builder
创建,其提供了非常丰富的定制化选项,请求工厂、消息转换器、拦截器、默认头、请求初始化器等等,简单易懂。
RestClient defaultClient = RestClient.create();
RestClient customClient = RestClient.builder()
.requestFactory(new HttpComponentsClientHttpRequestFactory())
.messageConverters(converters -> converters.add(new MyCustomMessageConverter()))
.baseUrl("https://example.com")
.defaultUriVariables(Map.of("variable", "foo"))
.defaultHeader("My-Header", "Foo")
.requestInterceptor(myCustomInterceptor)
.requestInitializer(myCustomInitializer)
.build();
使用
使用RestClient
更为简单,请求URL
、Header
、Body
、相应Response
接受、异常处理等等相当丰富简单。
String result = customClient.get()
.uri("https://example.com/this-url-does-not-exist")
.retrieve()
.onStatus((code) -> code.value() / 100 == 4, (request, response) -> {
throw new RuntimeException(response.getStatusCode() + " " + response.getHeaders());
})
.body(String.class);
WebClient
WebClient
是一个无阻塞、响应式的客户端,用于执行HTTP
请求。它在5.0
中引入,提供了RestTemplate
的替代方案,支持同步、异步和流式传输场景。
早在Spring5
版本中就已经出现,创建方法和RestClient
差不多,简单示例如下,其他详细内容可参考官网可Java Doc
。
WebClient webClient = WebClient.builder().baseUrl("http://localhost:8081").build();
RestTemplate
相比于上面两位这个更是古老,也正因此更为常见,使用的更多。但是官网明确表示,推荐使用<code>RestClient替换RestTemplate
,甚至还细心的整理了替换方案,可知官方可能计划着在未来彻底废弃RestTemplate
,也许哦。
HTTP Interface
官方描述:<code>Spring Framework允许您使用@HttpExchange
方法将HTTP
服务定义为Java
接口。您可以将这样的接口传递给HttpServiceProxyFactory
,以创建一个代理,该代理通过HTTP客户端(如RestClient
或WebClient
)执行请求。您还可以从@Controller
实现用于服务器请求处理的接口。
简单的来讲,可以类比为OpenFeign
,使用方法是几乎一样的。
这个也是<code>Spring6的特性,最开始官方支持了WebFlux
的实现,后来才加入的RestClient
和RestTemplate
,使用方式如上图。
方法级别的注解有下,是不是和使用OpenFeign
时几乎一样了,其实不然,@RequestHeader
、@RequestBody
、@PathVariable
、@RequestParam
、@CookieValue
等等也是支持的。
@GetExchange
@PostExchange
@PutExchange
@DeleteExchange
@PatchExchange
小结
可以说在Spring6.1
之后再进行REST
调用就有更加丰富的选择了,而且更加简单方便。
写在最后
拙作艰辛,字句心血,望诸君垂青,多予支持,不胜感激。
个人博客:无奈何杨(wnhyang)
个人语雀:wnhyang
共享语雀:在线知识共享
Github:wnhyang - Overview
上一篇: vue2中,前端实现语音播报
下一篇: 基于python+flask框架的基于web的助农特色农产品销售系统(开题+程序+论文) 计算机毕设
本文标签
四种方式调用REST接口(RestClient、WebClient、RestTemplate、HTTP Interface) Spring6.1新特性
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。