Skip to content

Instantly share code, notes, and snippets.

@ratulSharker
Last active September 6, 2021 20:31
Show Gist options
  • Save ratulSharker/a9310300428ce836dff330300315902d to your computer and use it in GitHub Desktop.
Save ratulSharker/a9310300428ce836dff330300315902d to your computer and use it in GitHub Desktop.
RestTemplate wrapper for REST call in spring boot.
package your.package.name.here;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestConfiguration {
@Bean
public RestService restService(RestTemplate restTemplate) {
return new RestService(restTemplate);
}
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(getMappingJackson2HttpMessageConverter());
return restTemplate;
}
public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
mappingJackson2HttpMessageConverter
.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_FORM_URLENCODED));
return mappingJackson2HttpMessageConverter;
}
}
package your.package.name.here;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import org.springframework.web.client.RestTemplate;
public class RestService {
private final RestTemplate restTemplate;
public RestService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public <T> T get(String url, ParameterizedTypeReference<T> returnType) {
return request(url, HttpMethod.GET, null, returnType, false);
}
public <T> T post(String url, @Nullable Object body, ParameterizedTypeReference<T> returnType, boolean isFormData) {
return request(url, HttpMethod.POST, body, returnType, isFormData);
}
public <T> T put(String url, @Nullable Object body, ParameterizedTypeReference<T> returnType, boolean isFormData) {
return request(url, HttpMethod.PUT, body, returnType, isFormData);
}
public <T> T patch(String url, @Nullable Object body, ParameterizedTypeReference<T> returnType,
boolean isFormData) {
return request(url, HttpMethod.PATCH, body, returnType, isFormData);
}
public <T> T delete(String url, ParameterizedTypeReference<T> returnType) {
return request(url, HttpMethod.DELETE, null, returnType, false);
}
private <T> T request(String url, HttpMethod method, @Nullable Object body,
ParameterizedTypeReference<T> returnType, boolean isFormData) {
HttpEntity<Object> requestEntity = null;
if (body != null) {
HttpHeaders headers = new HttpHeaders();
if (isFormData) {
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
}
requestEntity = new HttpEntity<Object>(body, headers);
}
ResponseEntity<T> responseEntity = restTemplate.exchange(url, method, requestEntity, returnType);
return responseEntity.getBody();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment