在開發過程中,有后台服務訪問遠程rest接口的需求,采用spring 框架中的RestTemplate類實現。
RestTemplate類位於org.springframework.web.client包中,提供Http的各類方法:如Get,Head,Post,Put,Delete等,用於訪問rest接口,本文以get方法舉個簡單的例子,介紹RestTemplate類的使用。
RestTemplate有兩個構造方法,分別是:
public RestTemplate() {
/**
...初始化過程
*/
}
public RestTemplate(ClientHttpRequestFactory requestFactory) {
this();
setRequestFactory(requestFactory);
}
其中,第二個構造方法中可以傳入ClientHttpRequestFactory參數,第一個進行默認初始化,需求中我們需要對請求超時進行設置並能夠對超時進行后續處理,第一個構造方法,我們無法控制超時時間,第二個構造中的ClientHttpRequestFactory接口的實現類中存在timeout屬性,因此選用第二個構造方法。
在spring配置文件中進行如下配置:
<!-- 配置RestTemplate -->
<!--Http client Factory-->
<bean id="httpClientFactory" class="org.springframework.http.client.SimpleClientHttpRequestFactory">
<property name="connectTimeout" value="${connectTimeout}"/>
<property name="readTimeout" value="${readTimeout}"/>
</bean>
<!--RestTemplate-->
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
<constructor-arg ref="httpClientFactory"/>
</bean>
注意:ClientHttpRequestFactory 接口有4個實現類,分別是:
1.AbstractClientHttpRequestFactoryWrapper 用來裝配其他request factory的抽象類。
2.CommonsClientHttpRequestFactory 允許用戶配置帶有認證和http連接池的httpclient,已廢棄,推薦用HttpComponentsClientHttpRequestFactory。
3.HttpComponentsClientHttpRequestFactory 同2.
4.SimpleClientHttpRequestFactory 接口的一個簡單實現,可配置proxy,connectTimeout,readTimeout等參數。
本文中使用的是第4個實現,具體的根據個人需求再選在使用哪個。
程序中如何使用:
1.在服務類中自動注入:
@Qualifier("restTemplate")
@Autowired
private RestTemplate restTemplate;
2. Map<String, Object> urlVariables = new HashMap<String, Object>();
urlVariables.put("param1",param1);
urlVariables.put("param2",param2);
JSONObject result = restTemplate.getForObject(restURI,
JSONObject.class, urlVariables);
方法的使用詳細大家再查api。