EN
Spring Boot 3 - How can I perform client API GET request with request body using RestTemplate?
1 answers
3 points
I want to perform a GET request with body.
How to do that or what library should I use?
I am currently using Java 17, Spring Boot 3.0.1 and RestTemplate
.
1 answer
7 points
The solution for your problem is to extend existing RestTemplate
class.
RestTemplate
class provides execute()
method that can be used to perform GET request with body.
I the below you can find practical example and ExtendedRestTemplate
class that contains required API extension for your problem - GET method + Payload/Body.
Practical example
Example ExtendedRestTemplate
class usage:
xxxxxxxxxx
1
ExtendedRestTemplate restTemplate = new ExtendedRestTemplate();
2
3
SomeRequest someRequest = new SomeRequest(1L, "John", "john@email.com");
4
SomeResponse someResponse = restTemplate.getForObject("http://localhost/api/some-path", someRequest, SomeResponse.class); // <--- GET method request with body
Example ExtendedRestTemplate.java
file:
xxxxxxxxxx
1
package com.dirask.example;
2
3
import java.net.URI;
4
import java.util.List;
5
import java.util.Map;
6
7
import org.springframework.http.HttpMethod;
8
import org.springframework.http.client.ClientHttpRequestFactory;
9
import org.springframework.http.converter.HttpMessageConverter;
10
import org.springframework.lang.Nullable;
11
import org.springframework.web.client.HttpMessageConverterExtractor;
12
import org.springframework.web.client.RequestCallback;
13
import org.springframework.web.client.RestClientException;
14
import org.springframework.web.client.RestTemplate;
15
16
public class ExtendedRestTemplate extends RestTemplate {
17
18
public ExtendedRestTemplate() {
19
super();
20
}
21
22
public ExtendedRestTemplate(ClientHttpRequestFactory requestFactory) {
23
super(requestFactory);
24
}
25
26
public ExtendedRestTemplate(List<HttpMessageConverter<?>> messageConverters) {
27
super(messageConverters);
28
}
29
30
31
public <T> T getForObject(URI url, Object requestObject, Class<T> responseType) throws RestClientException {
32
List<HttpMessageConverter<?>> messageConverters = super.getMessageConverters();
33
RequestCallback requestCallback = super.httpEntityCallback(requestObject, responseType);
34
HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor<>(responseType, messageConverters);
35
return super.execute(url, HttpMethod.GET, requestCallback, responseExtractor);
36
}
37
38
39
public <T> T getForObject(String url, Object requestObject, Class<T> responseType, Object... uriVariables) throws RestClientException {
40
List<HttpMessageConverter<?>> messageConverters = super.getMessageConverters();
41
RequestCallback requestCallback = httpEntityCallback(requestObject, responseType);
42
HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor<>(responseType, messageConverters);
43
return super.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
44
}
45
46
47
public <T> T getForObject(String url, Object requestObject, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException {
48
List<HttpMessageConverter<?>> messageConverters = super.getMessageConverters();
49
RequestCallback requestCallback = super.httpEntityCallback(requestObject, responseType);
50
HttpMessageConverterExtractor<T> responseExtractor = new HttpMessageConverterExtractor<>(responseType, messageConverters);
51
return super.execute(url, HttpMethod.GET, requestCallback, responseExtractor, uriVariables);
52
}
53
}
See also
0 commentsShow commentsAdd comment