(一)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客户端访问返回: " + 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);