在最近发布的Spring 6.1 M2版本中,推出了一个全新的同步HTTP客户端:RestClient
。用一句话来让Spring开发者认识RestClient
的话:像WebClient
一样具备流畅API的RestTemplate
。
所以,RestClient
的使命就是淘汰已经有14年历史的RestTemplate
。
关于WebClient
和RestTemplate
,之前在几种服务消费方式(RestTemplate、WebClient、Feign)(https://blog.didispace.com/spring-cloud-alibaba-2/)这篇文章中有详细的介绍。如果您有一定的了解,那么对于RestClient
一定可以快速上手。
RestClient
案例下面我们通过几个官方给出的案例一起来快速的认识一下RestClient
。
下面是一个最简单的GET请求,返回一个字符串。从这个例子中,我们可以看到API形式跟WebClient
类似。不像以前用RestTemplate
的时候那么麻烦。
关于GET请求,很多时候我们返回的不仅仅是String,更多的时候是一些实体;同时我们有时候还需要获取HTTP状态码以及头信息。这个时候,我们可以使用toEntity
方法来返回一个更为通用的ResponseEntity
来进行后续操作,比如下面这样:
在业务层面,为了更方便的解析业务数据。RestClient
还支持对结果进行对象转换。比如下面的例子,就是把HTTP请求返回的JSON数据转化为Pet
对象。这样就免去了开发者手动从ResponseEntity中获取内容,再进行消息转化的麻烦。
关于其他请求,也是类似的,比如下面的POST请求:
默认情况下,RestClient
在接收到4xx和5xx状态码的时候,会抛出一个RestClientException
的子类。对于这个动作,我们可以通过onStatus
方法去重写它,比如下面这样:
上面的例子是进一步做了包装,并重新抛出。当然您也可以做一些业务性的其他操作。
直接看下面的例子:
exchange方法提供了更灵活且完整的请求处理入口。在这里,开发者里获取到request
信息,也可以操作response
信息。所以,如果您有复杂的处理逻辑上一节中的请求方法无法满足你需要的时候,就可以通过这里的exchange
方法来定制复杂的处理逻辑。
相信大家对RestTemplate
一定都不陌生,但实际应用估计已经不是很多了,更多的会使用一些其他的客户端来实现HTTP的调用。如今Spring 6.1将推出的RestClient
将很好的弥补这块不足,同时与WebClient
互相补充。