常用的Spring Boot調(diào)用外部接口方式實(shí)現(xiàn)數(shù)據(jù)交互
springboot調(diào)用外部接口常用的方式
在系統(tǒng)開發(fā)過程中,免不了要去調(diào)用第三方接口,springboot為我們提供了幾種調(diào)用第三方接口的方法
1、使用原始httpClient請求
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.4.1</version> </dependency>
public static JSONObject doPost(JSONObject date) { String assessToken=""; CloseableHttpClient client = HttpClients.createDefault(); // 要調(diào)用的接口url String url = "http://127.0.0.1:8080 /submit"; HttpPost post = new HttpPost(url); JSONObject jsonObject = null; try { //創(chuàng)建請求體并添加數(shù)據(jù) StringEntity s = new StringEntity(date.toString()); //此處相當(dāng)于在header里頭添加請求頭等參數(shù) s.setContentType("application/json"); s.setContentEncoding("UTF-8"); post.setEntity(s); //此處相當(dāng)于在Authorization里頭添加Bear token參數(shù)信息 post.addHeader("Authorization", "Bearer " +assessToken); HttpResponse res = client.execute(post); String response1 = EntityUtils.toString(res.getEntity()); if (res.getStatusLine() .getStatusCode() == HttpStatus.SC_OK) { // 返回json格式: String result = EntityUtils.toString(res.getEntity()); jsonObject = JSONObject.parseObject(result); } } catch (Exception e) { throw new RuntimeException(e); } return jsonObject; }
2、使用RestTemplate請求
1、get請求
/** ** 入?yún)?請求的url、響應(yīng)體類型 */ RestTemplate restTemplate=new RestTemplate(); UriComponents uriComponents= UriComponentsBuilder.fromUriString("http://127.0.0.1:8080/user?name={name}") .build() .expand("jpl") .encode(); URI uri=uriComponents.toUri(); String body = restTemplate.getForEntity(uri, String.class).getBody(); /** ** 入?yún)?請求的url、響應(yīng)體類型、請求體的參數(shù) */ RestTemplate restTemplate=new RestTemplate(); Map params=new HashMap<>(); params.put("name","dada"); // ResponseEntity responseEntity = restTemplate.getForEntity("http://127.0.0.1:8080/user?name={name}", String.class, params);
2、post請求
public String submit(String documentId){ String assessToken=""; RestTemplate restTemplate = new RestTemplate(); //創(chuàng)建請求頭 HttpHeaders httpHeaders = new HttpHeaders(); //此處相當(dāng)于在Authorization里頭添加Bear token參數(shù)信息 httpHeaders.add(HttpHeaders.AUTHORIZATION, "Bearer " + assessToken); //此處相當(dāng)于在header里頭添加content-type等參數(shù) httpHeaders.add(HttpHeaders.CONTENT_TYPE,"application/json"); Map<String, Object> map = (Map<String, Object>) new HashMap<>().put("documentId", JSONObject.parse(documentId)); String jsonStr = JSON.toJSONString(map); //創(chuàng)建請求體并添加數(shù)據(jù) HttpEntity<Map> httpEntity = new HttpEntity<Map>(map, httpHeaders); String url = "http://127.0.0.1:8080/submit"; ResponseEntity<String> forEntity = restTemplate.postForEntity(url,httpEntity,String.class);//此處三個參數(shù)分別是請求地址、請求體以及返回參數(shù)類型 return forEntity.toString(); }
3、使用Feign請求
fegin常見咋微服務(wù)中使用,這里就不過多介紹
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> <version>1.2.2.RELEASE</version> </dependency>
簡單介紹一下如果使用feign遇到需要添加請求頭等信息時,遇到重寫feign的apply方法
@Configuration public class FeignConfig implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { //添加token requestTemplate.header("token", ""); } }
4、小結(jié)
RestTemplate、HTTPClient 和 Feign 都是 Java 中用于發(fā)送 HTTP 請求的工具,它們都可以用于構(gòu)建 HTTPRestful API。以下是它們的優(yōu)缺點(diǎn):
RESTTemplate
優(yōu)點(diǎn):
RestTemplate 簡單易用,支持自定義配置,可以更好地滿足業(yè)務(wù)需求。
RestTemplate 可以處理 HTTP 請求和響應(yīng),實(shí)現(xiàn)對 HTTP 請求和響應(yīng)的攔截、代理、攔截等功能。
缺點(diǎn):
RestTemplate 的功能較為復(fù)雜,需要手動實(shí)現(xiàn)請求體、請求頭、響應(yīng)體、響應(yīng)頭等自定義配置,因此需要一定的編程經(jīng)驗(yàn)和技能。
RestTemplate 默認(rèn)情況下使用 Apache HTTP 庫,因此在處理 HTTP 請求時,可能對某些業(yè)務(wù)場景不太友好,需要手動配置。
HTTPClient
優(yōu)點(diǎn):
HTTPClient 簡單易用,支持多種 HTTP 庫,可以更好地滿足不同的業(yè)務(wù)需求。
HTTPClient 可以處理 HTTP 請求和響應(yīng),實(shí)現(xiàn)對 HTTP 請求和響應(yīng)的攔截、代理、攔截等功能。
缺點(diǎn):
HTTPClient 默認(rèn)情況下使用 Apache HTTP 庫,因此在處理 HTTP 請求時,可能對某些業(yè)務(wù)場景不太友好,需要手動配置。
HTTPClient 的性能可能不如 RestTemplate 。
Feign
優(yōu)點(diǎn):
Feign 是 Java 中的 HTTP客戶端,可以支持多種 HTTP 庫,可以更好地滿足不同的業(yè)務(wù)需求。
Feign 可以實(shí)現(xiàn)自定義的請求攔截、響應(yīng)攔截、請求體攔截、響應(yīng)體攔截等功能,因此可以更好地滿足業(yè)務(wù)需求。
Feign 內(nèi)置了豐富的驗(yàn)證和認(rèn)證功能,可以支持自定義的驗(yàn)證和認(rèn)證規(guī)則。
缺點(diǎn):
Feign 的功能較為復(fù)雜,需要手動實(shí)現(xiàn)請求攔截、響應(yīng)攔截、請求體攔截、響應(yīng)體攔截、驗(yàn)證和認(rèn)證等功能,因此需要一定的編程經(jīng)驗(yàn)
到此這篇關(guān)于常用的Spring Boot調(diào)用外部接口方式實(shí)現(xiàn)數(shù)據(jù)交互的文章就介紹到這了,更多相關(guān)Spring Boot調(diào)用外部接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)國產(chǎn)加密算法SM4的示例詳解
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)國產(chǎn)加密算法SM4(ECB和CBC兩種模式),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-01-01解決java.sql.SQLException:?validateConnection?false問題的方法匯總(最
這篇文章主要給大家介紹了關(guān)于解決java.sql.SQLException:?validateConnection?false問題的方法匯總,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03Java中的static和final關(guān)鍵字的使用詳解
這篇文章主要介紹了Java中的static和final關(guān)鍵字的使用詳解, 當(dāng)方法名前有static,即為static方法,可以方便我們無需創(chuàng)建對象也可以調(diào)用此方法,靜態(tài)方法比較拉,只可以訪問 靜態(tài)的 屬性/變量/方法,無法訪問非靜態(tài)的這些屬性/變量/方法,需要的朋友可以參考下2024-01-01Java實(shí)現(xiàn)高校教務(wù)系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)高校教務(wù)系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08java實(shí)現(xiàn)二維數(shù)組轉(zhuǎn)置的方法示例
這篇文章主要介紹了java實(shí)現(xiàn)二維數(shù)組轉(zhuǎn)置的方法,結(jié)合實(shí)例形式詳細(xì)分析了java二維數(shù)組轉(zhuǎn)置的原理、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10spring定時任務(wù)執(zhí)行兩次及tomcat部署緩慢問題的解決方法
這篇文章主要給大家介紹了關(guān)于spring定時任務(wù)執(zhí)行兩次及tomcat部署緩慢問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Java實(shí)現(xiàn)多任務(wù)執(zhí)行助手
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多任務(wù)執(zhí)行助手,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法
和MyBatis類似,Spring或者Spring MVC框架在Web應(yīng)用程序的運(yùn)作中同樣主要負(fù)責(zé)處理數(shù)據(jù)庫事務(wù),這里我們就來看一下Java環(huán)境中MyBatis與Spring或Spring MVC框架的集成方法2016-06-06