I am working on Rest API using Spring boot and I had to access an application\'s endpoint. I used RestTemplate
for it. I was able to do it using 2 methods,
The RestTemplate
is a very versatile object.
Let's start with execute
, since it's the most generic method:
execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
@Nullable ResponseExtractor responseExtractor, Object... uriVariables)
Note the uriVariables
can be passed as a Map
too.
execute
is designed to be applicable in the highest variety of scenarios possible:
RequestCallback
(a @FunctionalInterface
with just one method doWithRequest(ClientHttpRequest request)
) before sending it.ResponseExtractor
.Compare this with exchange
:
exchange(String url, HttpMethod method, @Nullable HttpEntity> requestEntity,
Class responseType, Object... uriVariables)
There are two major differences here:
HttpEntity
directly, whereas before it needed to be set manually using the RequestCallback
.Class
.As you can see, this is much more convenient for everyday use.
Methods like getForEntity
and postForEntity
are even shorter, easier to understand versions of this:
getForEntity(String url, Class responseType, Object... uriVariables)
postForEntity(String url, @Nullable Object request, Class responseType,
Object... uriVariables)
Notice postForEntity
now allows you to POST any Object
directly without a wrapper. There is no performance benefit or detriment to using these instead of execute
, as they call execute
themselves under the hood - it's simply a matter of convenience.