按春季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);