Several request calls of SpringMVC RestTemplate

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>>() { });

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326027432&siteId=291194637