使用restTemplate連線restful風格的介面
阿新 • • 發佈:2019-02-03
在開發中,web後端有時候需要呼叫別的服務的介面,獲取資料。
使用restTemplate元件,spring封裝好的一個類。底層是通過httpclient實現的。
1首先新增jar包
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency>
pom中需要新增的依賴,version改為自己專案中的spring統一版本。
2在配置檔案中注入bean
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <constructor-arg index="0"> <list> <bean id="byteArrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"></bean> <bean id="stringHttpMessageConverter" class="org.springframework.http.converter.StringHttpMessageConverter"> <constructor-arg value="UTF-8"></constructor-arg> </bean> <bean id="resourceHttpMessageConverter" class="org.springframework.http.converter.ResourceHttpMessageConverter"></bean> <bean id="sourceHttpMessageConverter" class="org.springframework.http.converter.xml.SourceHttpMessageConverter"></bean> <bean id="allEncompassingFormHttpMessageConverter" class="org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter"></bean> <bean id="jaxb2RootElementHttpMessageConverter" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter"></bean> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean> </list> </constructor-arg> </bean>
3使用bean
@Autowired
private RestTemplate restTemplate;
直接注入即可,然後傳送請求(post和get)
get
ResponseEntity<String> responseEntity = restTemplate.getForEntity("127.0.0.1:7001/wktest/testaction?data={data}", String.class, "引數"); String dataStr = responseEntity.getBody(); HttpHeaders headers = responseEntity.getHeaders();
post
ResponseEntity<String> responseEntity = restTemplate.postForEntity("127.0.0.1:7001/wktest/testaction", "引數", String.class);
String dataStr = responseEntity.getBody();
HttpHeaders headers = responseEntity.getHeaders();
介面返回的資料一般在dataStr中,其他的一些附帶資訊在headers中
引數可以是單個字串,數字,也可以是一個json格式的字串,json中封裝多個引數。
同時還可以設定請求超時的時間,通過程式碼和bean配置都可以,這裡給出一個程式碼配置的例子
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout();
requestFactory.setReadTimeout(1000);//連線時間1000ms
restTemplate.setRequestFactory(30000);//響應時間30000ms