SpringMVC RestTemplate的幾種請求調用


SpringMVC RestTemplate的幾種請求調用

1.用統一的方法模板進行四種請求:POST,PUT,DELETE,GET

 

1 restTemplate.exchange(
2         String url, 
3         HttpMethod method,
4         HttpEntity requestEntity, 
5         Class responseType, 
6         Object uriVariables[]
7     )

 

說明:
1)url: 請求地址;
2)method: 請求類型(如:POST,PUT,DELETE,GET);
3)requestEntity: 請求實體,封裝請求頭,請求內容
4)responseType: 響應類型,根據服務接口的返回類型決定
5)uriVariables: url中參數變量值

例如:

 

(1)POST請求

1 String reqJsonStr = "{\"code\":\"testCode\", \"group\":\"testGroup\",\"content\":\"testContent\", \"order\":1}";
2 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON);
3 HttpEntity<String> entity = new HttpEntity<String>(reqJsonStr,headers);
4 ResponseEntity<Map> resp = restTemplate.exchange(DIC_DATA_URL, HttpMethod.POST, entity, Map.class);

 

(2)PUT請求

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請求

ResponseEntity<Map> resp = restTemplate.exchange(DIC_DATA_URL + "?id={id}", HttpMethod.DELETE, null, Map.class, 227);

 

(4)GET請求

ResponseEntity<String> results = restTemplate.exchange(url,HttpMethod.GET, null, String.class, params);

 

2.用各種請求對應的專一接口

(1)POST請求

postForObject(String url, Object request, Class responseType, Object uriVariables[]):
 返回數據對象Object,例如:
        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);


> 或者



postForEntity:(String url, Object request, Class responseType, Object uriVariables[])
返回封裝了數據對象的ResponseEntity對象,例如:
    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請求

    put(String url, Object request, Object urlVariables[])
例如:
    DicData data = new DicData();
    data.setId(226L); data.setCode("updateCode"); data.setGroup("UPDATE"); 
    data.setContent("測試數據"); data.setOrder(9);      
    restTemplate.put(DIC_DATA_URL, data); 

 (3)DELETE請求

    delete(String url, Object urlVariables[])

例如:
    restTemplate.delete(DIC_DATA_URL + "?id={id}", 222);

 

(4)GET請求

    getForObject(String url, Class responseType, Object urlVariables[]):

返回請求的結果對象,例如
    Order o = restTemplate.getForObject(Constants.SERVER_URL+"/order?orderCode={orderCode}",
                        Order.class,order.getOrderCode());
getForEntity(String url, Class responseType, Object urlVariables[]):
返回封裝了數據對象的ResponseEntity對象,例如:
ResponseEntity<EBTUser> ebtuserResponse = restTemplate.getForEntity(url,EBTUser.class);
EBTUser user = ebtuserResponse.getBody();

 

3.GET請求,要返回一些復合數據類型時的處理

 

(1)返回List類型數據

    DicData[] dicResult = restTemplate.getForObject( Constants.SERVER_URL + "/dicDatas/dicData?"
                + "group={group}", DicData[].class, group);
    List<DicData> list = Arrays.asList(dicResult);

  或者

// pass generic information to resttemplate; ParameterizedTypeReference為spring3.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)返回屬性中有范型數據的復合對象

    比如,分頁對象
    ResponseEntity<String> results = restTemplate.exchange(url,HttpMethod.GET, null, String.class, params);
    // 借助com.fasterxml.jackson.databind.ObjectMapper 對象來解析嵌套的json字符串    
    ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    PageInfo<Product> page = mapper.readValue(results.getBody(), new TypeReference<PageInfo<Product>>() { });

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM