爲什麼要用RestTemplate??
- 相信大家之前都用過apache的HTTPClient類,邏輯繁瑣,代碼複雜,還要自己編寫使用類HttpClientUtil,封裝對應的post,get,delete等方法。
- RestTemplate的行爲可以通過callback回調方法和配置HttpMessageConverter 來定製,用來把對象封裝到HTTP請求體,將響應信息放到一個對象中。RestTemplate提供更高等級的符合HTTP的六種主要方法,可以很簡單的調用RESTful服務。
使用方式
一、restTemplate注入到bean裏面。
@Configuration
public class RestTempleConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
也可以自己設置restTemplate的超時時間的一些設置
/**
* 替代默認的SimpleClientHttpRequestFactory
* 設置超時時間重試次數
* 同時設置一些攔截器以便監控
* @return
*/
@Bean
public RestTemplate restTemplate() {
//生成一個設置了連接超時時間、請求超時時間、異常重試次數3次
RequestConfig config = RequestConfig.custom().setConnectionRequestTimeout(10000).setConnectTimeout(10000).setSocketTimeout(30000).build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(config).setRetryHandler(new DefaultHttpRequestRetryHandler(3, false));
HttpClient httpClient = builder.build();
ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
RestTemplate restTemplate = new RestTemplate(requestFactory);
//做個日誌攔截器;從性能上考慮,當前屏蔽該功能
//restTemplate.setInterceptors(Collections.singletonList(new RestTemplateConsumerLogger()));
return restTemplate;
}
若是要進行剛詳細的操作可以查看官方文檔
二、restTemplate的使用。
post方法
String reqJsonStr = "{\"code\":\"testCode\",\"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);
get方法
ResponseEntity<String> results = restTemplate.exchange(url,HttpMethod.GET, null, String.class, params);
put方法
String reqJsonStr = "{\"id\":227, \"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);
delete方法
ResponseEntity<Map> resp = restTemplate.exchange(DIC_DATA_URL + "?id={id}", HttpMethod.DELETE, null, Map.class, 227);
說明
get和delete方法如果需要傳token的話可以像post和put方法一樣new一個HttpHeaders,然後將token放進去。
參數的說明
1)url: 請求地址;
2)method: 請求類型(如:POST,PUT,DELETE,GET);
3)requestEntity: 請求實體,封裝請求頭,請求內容
4)responseType: 響應類型,根據服務接口的返回類型決定
5)uriVariables: url中參數變量值