WebClient vs RestTemplate



按春季5:

WebClient是一个接口,代表执行Web请求的主要入口点。

它是作为Spring Web反应性模块的一部分而创建的,将在这些情况下替换经典的RESTTEMPLATE。新客户端是一种在HTTP/1.1协议

上工作的反应性,非阻滞解决方案

这是否意味着,如果要升级到春季5?

或在春季5中使用RESTTEMPLAPE的解决方法?

no,RESTTEMPLATE将继续存在(至少目前)。您不必用WebClient替换它。
主要区别之一是RESTTEMPLATE是同步和阻止即,当您进行休息时,您需要等到响应返回以进一步进行。

,但是网络电量与此完全相反。呼叫者无需等到响应回来。相反,当有回应时,他将收到通知。

如果您需要这样的功能,则是是,您需要用WebClient替换RESTTEMPLATE。
实际上,您可以使用.block()在WebClient中实现REST模板,例如同步处理。但是另一种方式是不可能的。

编辑:

RESTTEMPLATE将在未来版本(> 5.0)中弃用,并且不会添加主要的新功能

根据Java Doc,RESTTEMPLATE将处于维护模式。春季团队建议如果可能的话,请使用网络限制:

注意:从5.0开始,无障碍物,反应性org.springframework.web.reactive.client.webclient提供现代替代RESTTEMPLATE,并有效地支持两种同步和异步以及流媒体场景。RESTTEMPLATE将是在未来版本中贬低,将没有主要的新功能添加了前进。

webclient是 nonblocking 客户端,RESTTEMPLATE是 blocking client。

很长一段时间以来,Spring一直是网络客户。在引擎盖下, RESTTEMPLATE 使用Java API API,该API基于主题模型。这意味着此问题将被阻止,直到客户端收到响应为止。阻塞代码的问题是由于存在任何内存和CPU周期的存在。让我们考虑许多正在等待产生结果所需的低服务的应用程序。Sooner或更高版本,收集结果的请求。结果,该程序会产生许多问题,从而导致线程池耗尽或占据所有可用内存。由于CPU切换,我们还可以体验性能。

春季网络电视与RESTTEMPLATE

RestTemplate并未真正弃用。但是将来不会进化。因此,坚持使用RestTemplate是完全有效的,如果它可以执行您的需要。

另一种方法是,如果您需要特定的用法模式,例如流式,散布/gatter或自定义超时,则不会由RestTemplate介绍,并且需要使用WebClient

现在在阻止应用程序中使用WebClient也可以。使用block()不应在那里受伤,Spring MVC控制器确实支持反应性返回类型。

WebClient支持异步和同步调用。RESTTEMPLATE仅支持同步调用。即使将RESTTEMPLATE删除(只要您不需要异步行为),旧代码也无需更改。

根据公告,从春季6.1和春季靴子3.2我们有一个全新的选项,称为 RestClient

春季框架6.1 m2介绍 RESTCLIENT ,a 新同步HTTP客户端。顾名思义,RestClient提供了流利的APIwebclient具有RESTTEMPLATE的基础架构。

RestClient restClient = RestClient.create();
String result = restClient.get()
  .uri("https://example.com")
  .retrieve()
  .body(String.class);

基于RestTemplate的Javadoc,这是推荐的替换:

注意:从6.1起,RESTCLIENT为同步HTTP访问提供了更现代的API。

新的restclient也可以与最近引入的声明性HTTP接口一起使用,而无需在类路径上包括WebFlux。

RestClient restClient = RestClient.builder().baseUrl("https://api.github.com/").build();
RestClientAdapter adapter = RestClientAdapter.create(restClient);
HttpServiceProxyFactory factory = HttpServiceProxyFactory.builderFor(adapter).build();
RepositoryService service = factory.createClient(RepositoryService.class);

最新更新