As per spring 5:
WebClient is an interface representing the main entry point for performing web requests.
It has been created as a part of the Spring
According to the Java Doc the RestTemplate will be in maintenance mode. Spring team advise to use the WebClient if possible:
NOTE: As of 5.0, the non-blocking, reactive org.springframework.web.reactive.client.WebClient offers a modern alternative to the RestTemplate with efficient support for both sync and async, as well as streaming scenarios. The RestTemplate will be deprecated in a future version and will not have major new features added going forward.
WebClient supports asynchronous as well as synchronous calls. RestTemplate supports only synchronous calls. No changes are required in old code even if the RestTemplate is depracated(as long as you don't need asynchronous behaviour)
WebClient is Non-Blocking Client, RestTemplate is Blocking Client.
For a long time, spring serves as a web customer. Under the hood, RestTemplate uses the Java API API, which is based on the subject model.This means that the matter will be blocked until the client receives a response. The problem with the blockage code is due to the existence of any string of memory and cpu cycles. Let us consider a lot of applications that are waiting for low services that are needed to produce the result.Sooner or later, requests for the results are collected. As a result, the program creates many issues, which result in depletion of a pool of thread or occupying all of the available memory. We can also experience performance performance due to the cpu switching.
Spring WebClient vs. RestTemplate
No, RestTemplate will continue to exist(atleast for now). You don't have to replace it with WebClient.
One of the main difference is RestTemplate is synchronous and blocking. i.e when you do a rest call you need to wait till the response comes back to proceed further.
But WebClient is complete opposite of this. The caller need not wait till response comes back. Instead he will be notified when there is a response.
If you need such a functionality, then yes you need to replace your Resttemplate with WebClient.
You can infact achieve Rest template like synchronous processing in webclient using .block()
. But the other way is not possible.
EDIT:
The RestTemplate will be deprecated in a future version(> 5.0) and will not have major new features added going forward