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