/** * */ package io.pratik.restclient; import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.boot.web.client.RestTemplateCustomizer; 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.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; import org.springframework.oxm.xstream.XStreamMarshaller; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RequestCallback; import org.springframework.web.client.ResponseExtractor; import org.springframework.web.client.RestTemplate; import com.fasterxml.jackson.databind.ObjectMapper; import io.pratik.apis.models.Product; /** * @author pratikdas * */ public class RestConsumer { public void getProductAsJson() { RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; ResponseEntity response = restTemplate.getForEntity(resourceUrl, String.class); String productsJson = response.getBody(); System.out.println(productsJson); } public void getProducts() { //RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory()); RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; ResponseEntity response = restTemplate.getForEntity(resourceUrl, List.class); List products = response.getBody(); System.out.println(products); } public void getProductObjects() { //RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory()); RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; List products = restTemplate.getForObject(resourceUrl, List.class); System.out.println(products); } public void getHeaders() { RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; HttpHeaders httpHeaders = restTemplate.headForHeaders(resourceUrl); System.out.println("headers "+httpHeaders); } public void createProduct() { RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; HttpEntity request = new HttpEntity(new Product("Television", "Samsung",1145.67,"S001")); String productCreateResponse = restTemplate.postForObject(resourceUrl, request, String.class); System.out.println(productCreateResponse); } public void createProductWithExchange() { RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; HttpEntity request = new HttpEntity(new Product("Television", "Samsung",1145.67,"S001")); ResponseEntity productCreateResponse = restTemplate.exchange(resourceUrl, HttpMethod.POST, request, String.class); System.out.println(productCreateResponse); } public void updateProductWithExchange() { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("Authorization", "Bearer ..."); String resourceUrl = "http://localhost:8080/products"; HttpEntity request = new HttpEntity(new Product("Television", "Samsung",1145.67,"S001")); restTemplate.exchange(resourceUrl, HttpMethod.PUT, request, Void.class); } public void getProductAsStream() { final Product fetchProductRequest = new Product("Television", "Samsung",1145.67,"S001"); RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; RequestCallback requestCallback = request -> { ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(request.getBody(), fetchProductRequest); request.getHeaders() .setAccept(Arrays.asList( MediaType.APPLICATION_OCTET_STREAM, MediaType.ALL)); }; ResponseExtractor responseExtractor = response -> { Path path = Paths.get("some/path"); Files.copy(response.getBody(), path); return null; }; restTemplate.execute(resourceUrl, HttpMethod.GET, requestCallback, responseExtractor ); } public void submitProductForm() { RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("id", "1"); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( resourceUrl+"/form", request , String.class); System.out.println(response.getBody()); } private ClientHttpRequestFactory getClientHttpRequestFactory() { int connectTimeout = 5000; int readTimeout = 5000; HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(); clientHttpRequestFactory.setConnectTimeout(connectTimeout); clientHttpRequestFactory.setReadTimeout(readTimeout); return clientHttpRequestFactory; } public void createProductWithLocation() { RestTemplate restTemplate = new RestTemplate(getClientHttpRequestFactory()); String resourceUrl = "http://localhost:8080/products"; HttpEntity request = new HttpEntity(new Product("Television", "Samsung",1145.67,"S001")); URI location = restTemplate.postForLocation(resourceUrl, request); System.out.println(location); } public void getAllowedOps() { RestTemplate restTemplate = new RestTemplate(); String resourceUrl = "http://localhost:8080/products"; Set optionsForAllow = restTemplate.optionsForAllow(resourceUrl); HttpMethod[] supportedMethods = {HttpMethod.GET, HttpMethod.POST, HttpMethod.PUT, HttpMethod.DELETE}; System.out.println(optionsForAllow); } public void getProductWithError() { RestTemplate restTemplate = new RestTemplate(); RestTemplateCustomizer customizers = new RestTemplateCustomizer() { @Override public void customize(RestTemplate restTemplate) { restTemplate.setErrorHandler(new CustomErrorHandler()); } }; RestTemplateBuilder builder = new RestTemplateBuilder(customizers ); // restTemplate = new RestTemplate();// builder.build(); restTemplate = builder.build(); System.out.println("Default error handler::" + restTemplate.getErrorHandler()); String resourceUrl = "http://localhost:8080/product/error"; try { Product product = restTemplate.getForObject(resourceUrl, Product.class); }catch(RestServiceException ex) { System.out.println("error occured: ["+ ex.getError() + "] in service:: "+ ex.getServiceName()); } } public void getProductWithMessageTransformer() { RestTemplate restTemplate = new RestTemplate(); RestTemplateCustomizer customizers = new RestTemplateCustomizer() { @Override public void customize(RestTemplate restTemplate) { restTemplate.setErrorHandler(new CustomErrorHandler()); } }; RestTemplateBuilder builder = new RestTemplateBuilder(customizers ); // restTemplate = new RestTemplate();// builder.build(); restTemplate = builder.build(); System.out.println("Default error handler::" + restTemplate.getErrorHandler()); String resourceUrl = "http://localhost:8080/product/error"; try { Product product = restTemplate.getForObject(resourceUrl, Product.class); }catch(RestServiceException ex) { System.out.println("error occured: ["+ ex.getError() + "] in service:: "+ ex.getServiceName()); } } public void getProductAsXML() { RestTemplate restTemplate = new RestTemplate(); restTemplate.setMessageConverters(getXmlMessageConverter()); HttpHeaders headers = new HttpHeaders(); headers.setAccept(Collections.singletonList(MediaType.APPLICATION_XML)); HttpEntity entity = new HttpEntity<>(headers); String productID = "P123445"; String resourceUrl = "http://localhost:8080/products/"+productID; ResponseEntity response = restTemplate.exchange(resourceUrl, HttpMethod.GET, entity, Product.class, "1"); Product resource = response.getBody(); } private List> getXmlMessageConverter() { XStreamMarshaller marshaller = new XStreamMarshaller(); marshaller.setAnnotatedClasses(Product.class); MarshallingHttpMessageConverter marshallingConverter = new MarshallingHttpMessageConverter(marshaller); List> converters = new ArrayList<>(); converters.add(marshallingConverter); return converters; } public static void main(String[] args) { RestConsumer restConsumer = new RestConsumer(); /*restConsumer.getProductAsJson(); restConsumer.getProducts(); restConsumer.getProductObjects(); restConsumer.getHeaders(); restConsumer.createProduct(); restConsumer.getAllowedOps(); restConsumer.updateProductWithExchange(); restConsumer.getProductAsStream(); restConsumer.createProductWithLocation(); */ //restConsumer.getProductWithError(); restConsumer.getProductAsXML(); } }