Springboot使用RestTemplate調(diào)用第三方接口的操作代碼
前言
工作當(dāng)中,經(jīng)常會使用到很多第三方提供的功能或者我們自己家也會提供一些功能給別人使用。
一般都是通過相互調(diào)用API接口的形式,來進(jìn)行業(yè)務(wù)功能的對接。
這里所講的API接口,一般是指HTTP(s)形式的請求,遵循RESTful的標(biāo)準(zhǔn)。
傳統(tǒng)情況下,在Java代碼里面訪問restful服務(wù),一般使用Apache的HttpClient,不過此種方法使用起來非常繁瑣。
Spring從3.0開始提供了一種非常簡單的模板類來進(jìn)行操作,這就是RestTemplate。
Spring Boot如何使用RestTemplate
1、在項(xiàng)目pom.xml文件中引入web,依賴內(nèi)容如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>一般項(xiàng)目中都會已有此依賴。
2、封裝RestTemplate配置類RestTemplateConfig(一般放在api/conf目錄),代碼如下:
package com.***.api.conf;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate(httpRequestFactory());
}
@Bean
public HttpClient httpClient() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
connectionManager.setMaxTotal(3000);
connectionManager.setDefaultMaxPerRoute(1000);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(3000)
.setConnectTimeout(3000)
.setConnectionRequestTimeout(3000)
.build();
return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
}
}
3、使用舉例
舉例調(diào)用第三方的一個API接口(POST),根據(jù)手機(jī)號碼獲取用戶的個人信息。
@Override
public UserInfo isUserHasCalendar(RestTemplate restTemplate, String sMobile) {
JSONObject postData = new JSONObject();
postData.put("mobile", sMobile);
// URL為第三方HTTP接口地址
String URL = “******”;
return restTemplate.postForEntity(URL, postData, UserInfo.class).getBody();
}再拿對接過的小鵝通API接口,舉例。
小鵝通開放API接口文檔:
文檔地址: https://api-doc.xiaoe-tech.com/
1)調(diào)用“獲取access_token”接口:
此接口的官方文檔:

請求方式為get,關(guān)鍵代碼如下:
public String getXiaoETongToken(RestTemplate restTemplate) {
String url = "https://api.xiaoe-tech.com/token?app_id=app******&client_id=xop******&secret_key=******&grant_type=client_******";
ResponseEntity<JSONObject> results = restTemplate.exchange(url, HttpMethod.GET, null, JSONObject.class);
Token tokenDto = JSONObject.toJavaObject(results.getBody(), Token.class);
return tokenDto.getData().getAccess_token();
}2)調(diào)用“查詢單個用戶信息”接口
此接口的官方文檔:

請求方式為post,通過user_id獲取用戶信息的關(guān)鍵代碼如下:
public XiaoETongUser getXiaoETongUser(RestTemplate restTemplate, String Token, String userId) {
XiaoETongUser user = null;
try {
String url = "https://api.xiaoe-tech.com/xe.user.info.get/1.0.0";
JSONObject postData = new JSONObject();
postData.put("access_token", Token);
postData.put("user_id", userId);
Map map = new HashMap();
String[] list = {"name", "nickname", "wx_union_id", "wx_open_id", "wx_app_open_id", "wx_avatar"};
map.put("field_list", list);
postData.put("data", map);
ResultMap resultMap = restTemplate.postForEntity(url, postData, ResultMap.class).getBody();
if (resultMap.get("code").equals(0)) {
String data = JSON.toJSONString(resultMap.get("data"));
user = JSONObject.parseObject(data, XiaoETongUser.class);
}
} catch (RestClientException e) {
e.printStackTrace();
}
return user;
}總結(jié)
上面,我只演示了最常使用的請求方式get、post的簡單使用方法,當(dāng)然RestTemplate的功能還有很多,比如:請求方式為delete、put等等,我就不一一舉例了,感興趣的可以去看看RestTemplate的源碼。
到此這篇關(guān)于Springboot使用RestTemplate調(diào)用第三方接口的文章就介紹到這了,更多相關(guān)RestTemplate調(diào)用第三方接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot使用RestTemplate實(shí)現(xiàn)HTTP請求詳解
- SpringBoot中RestTemplate的使用詳解
- springboot中的RestTemplate使用詳解
- SpringBoot使用RestTemplate的示例詳解
- Springboot之restTemplate的配置及使用方式
- SpringBoot 如何使用RestTemplate發(fā)送Post請求
- 關(guān)于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務(wù)傳輸?shù)膯栴}
- Springboot RestTemplate 簡單使用解析
- SpringBoot3 RestTemplate配置與使用詳解
相關(guān)文章
Mybatis Order by動態(tài)參數(shù)防注入方式
這篇文章主要介紹了Mybatis Order by動態(tài)參數(shù)防注入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04
Spring?RestTemplate遠(yuǎn)程調(diào)用過程
這篇文章主要介紹了Spring?RestTemplate遠(yuǎn)程調(diào)用過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
SpringBoot實(shí)現(xiàn)任意位置獲取HttpServletRequest對象
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)任意位置獲取HttpServletRequest對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
spring-boot-starter-security的簡單使用方式
文章介紹了三種使用Spring Boot Security的方法:基于配置文件、基于配置類和基于注解的方式,通過這些方法,可以實(shí)現(xiàn)對Web應(yīng)用的權(quán)限控制,確保只有授權(quán)用戶才能訪問特定資源2024-11-11
java正則表達(dá)式如何獲取xml文件中指定節(jié)點(diǎn)的值
這篇文章主要介紹了java正則表達(dá)式如何獲取xml文件中指定節(jié)點(diǎn)的值問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
rocketmq消費(fèi)負(fù)載均衡--push消費(fèi)詳解
這篇文章主要介紹了rocketmq消費(fèi)負(fù)載均衡--push消費(fèi)詳解,本文介紹了DefaultMQPushConsumerImpl消費(fèi)者,客戶端負(fù)載均衡相關(guān)知識點(diǎn)。,需要的朋友可以參考下2019-06-06

