restTemplate的exchange請求如何實現

爲什麼要用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中參數變量值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章