Several request calls of SpringMVC RestTemplate
1. Use a unified method template to make four requests: POST, PUT, DELETE, GET
restTemplate.exchange(
String url,
HttpMethod method,
HttpEntity requestEntity,
Class responseType,
Object uriVariables[]
)
illustrate:
1) url: request address;
2) method: request type (eg: POST, PUT, DELETE, GET);
3) requestEntity: request entity, encapsulate request header, request content
4) responseType: response type, determined according to the return type of the service interface
5) uriVariables: parameter variable value in url
E.g:
(1) POST request
String reqJsonStr = "{\"code\":\"testCode\", \"group\":\"testGroup\",\"content\":\"testContent\", \"order\":1}";
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(reqJsonStr,headers);
ResponseEntity<Map> resp = restTemplate.exchange(DIC_DATA_URL, HttpMethod.POST, entity, Map.class);
(2) PUT request
String reqJsonStr = "{\"id\":227,\"code\":\"updateCC\", \"group\":\"UPDATE\",\"content\":\"updateCT\", \"order\":9}";
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> entity = new HttpEntity<String>(reqJsonStr,headers);
ResponseEntity<Map> resp = restTemplate.exchange(DIC_DATA_URL, HttpMethod.PUT, entity, Map.class);
(3) DELETE request
ResponseEntity<Map> resp = restTemplate.exchange(DIC_DATA_URL + "?id={id}", HttpMethod.DELETE, null, Map.class, 227);
(4) GET request
ResponseEntity<String> results = restTemplate.exchange(url,HttpMethod.GET, null, String.class, params);
2. Use specific interfaces corresponding to various requests
(1) POST request
postForObject(String url, Object request, Class responseType, Object uriVariables[]):
Return the data object Object, for example:
DicData data = new DicData();
data.setCode("cd123"); data.setGroup("TEST"); data.setContent("测试数据"); data.setOrder(5);
DicData obj = restTemplate.postForObject(DIC_DATA_URL, data, DicData.class);
> or
postForEntity:(String url, Object request, Class responseType, Object uriVariables[])
Returns a ResponseEntity object that encapsulates the data object, for example:
DicData data = new DicData();
data.setCode("cd123"); data.setGroup("TEST"); data.setContent("测试数据"); data.setOrder(5);
ResponseEntity<Map> respEntity = restTemplate.postForEntity(DIC_DATA_URL, data, Map.class);
> (2)PUT request
put(String url, Object request, Object urlVariables[])
E.g:
DicData data = new DicData();
data.setId(226L); data.setCode("updateCode"); data.setGroup("UPDATE");
data.setContent("Test data"); data.setOrder(9);
restTemplate.put(DIC_DATA_URL, data);
> (3) DELETE request
delete(String url, Object urlVariables[])
E.g:
restTemplate.delete(DIC_DATA_URL + "?id={id}", 222);
> (4) GET request
getForObject(String url, Class responseType, Object urlVariables[]):
Returns the requested result object, e.g.
Order o = restTemplate.getForObject(Constants.SERVER_URL+"/order?orderCode={orderCode}",
Order.class,order.getOrderCode());
getForEntity(String url, Class responseType, Object urlVariables[]):
Returns a ResponseEntity object that encapsulates the data object, for example:
ResponseEntity<EBTUser> ebtuserResponse = restTemplate.getForEntity(url,EBTUser.class);
EBTUser user = ebtuserResponse.getBody();
3. GET request, processing when some composite data types are to be returned
> (1) Return List type data
DicData[] dicResult = restTemplate.getForObject( Constants.SERVER_URL + "/dicDatas/dicData?"
+ "group={group}", DicData[].class, group);
List<DicData> list = Arrays.asList(dicResult);
or
// ParameterizedTypeReference solves single-level non-nested and nested lists
// pass generic information to resttemplate; ParameterizedTypeReference is a class introduced after spring 3.2
ParameterizedTypeReference<List<DicData>> responseType = new ParameterizedTypeReference<List<DicData>>();
ResponseEntity<List<DicData>> resp = restTemplate.exchange(Constants.SERVER_URL + "/dicDatas/dicData?group={group}",
HttpMethod.GET, null, responseType);
List<DicData> list = resp.getBody();
> (2) Returns a composite object with generic data in its properties
// ObjectMapper parses the nested list into a json string, TypeReference
For example, the paging object
ResponseEntity<String> results = restTemplate.exchange(url,HttpMethod.GET, null, String.class, params);
// Parse the nested json string with the help of the com.fasterxml.jackson.databind.ObjectMapper object
ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
PageInfo<Product> page = mapper.readValue(results.getBody(), new TypeReference<PageInfo<Product>>() { });