(一)RestTemplate 客戶端
1、RestTemplate 是Spring的封裝,需要spring的包 spring-web-3.0.7.RELEASE.jar
2、客戶端代碼:
1 /** 2 * RestTemplate 客戶端訪問 3 */ 4 private void RestTemplateVisit() { 5 String returnXml = ""; // 核心返回結果報文字符串 6 7 try { 8 9 //復雜構造函數的使用 10 SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); 11 requestFactory.setConnectTimeout(1000);// 設置超時 12 requestFactory.setReadTimeout(1000); 13 14 //利用復雜構造器可以實現超時設置,內部實際實現為 HttpClient 15 RestTemplate restTemplate = new RestTemplate(requestFactory); 16 17 //設置HTTP請求頭信息,實現編碼等 18 HttpHeaders requestHeaders = new HttpHeaders(); 19 // requestHeaders.set("Accept", "text/"); 20 requestHeaders.set("Accept-Charset", "utf-8"); 21 requestHeaders.set("Content-type", "text/xml; charset=utf-8");// 設置編碼 22 23 //利用容器實現數據封裝,發送 24 HttpEntity<String> entity = new HttpEntity<String>(mRequestXml, requestHeaders); 25 returnXml = restTemplate.postForObject(mUrl, entity, String.class); 26 27 // 轉碼原因:RestTemplate默認是使用org.springframework.http.converter.StringHttpMessageConverter來解析 28 // StringHttpMessageConverter 默認用的 ISO-8859-1來編碼的 29 returnXml = new String(returnXml.getBytes("ISO-8859-1"), "utf-8"); 30 31 } catch (UnsupportedEncodingException e) { 32 e.printStackTrace(); 33 } 34 35 System.out.println("restTemplate客戶端訪問返回: \n" + returnXml); 36 }
(二)RestTemplate 詳解
1、兩個構造方法:第二個實現超時。
public RestTemplate() { /** ...初始化過程 */ } //實現超時 public RestTemplate(ClientHttpRequestFactory requestFactory) { this(); setRequestFactory(requestFactory); }
其中,第二個構造方法中可以傳入ClientHttpRequestFactory參數,第一個進行默認初始化,因為我們經常需要對請求超時進行設置並能夠對超時進行后續處理,而第一個構造方法,我們無法控制超時時間,第二個構造中的ClientHttpRequestFactory接口的實現類中存在timeout屬性,因此選用第二個構造方法。
1 SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); 2 requestFactory.setConnectTimeout(1000); 3 requestFactory.setReadTimeout(1000); 4 5 RestTemplate restTemplate = new RestTemplate(requestFactory);