SpringBoot?調(diào)用外部接口的三種實(shí)現(xiàn)方法
一、第一種方式(HttpClient等)
使用插件方式,比如自帶的HttpClient,或者OkHttp,甚至是原生的HttpURLConnection 等等,這里以HttpClient為例。
1、封裝工具類
簡(jiǎn)單封裝的get請(qǐng)求
/** * 發(fā)送get請(qǐng)求:帶請(qǐng)求頭和請(qǐng)求參數(shù) * * @param url 請(qǐng)求地址 * @param headers 請(qǐng)求頭 * @param params 請(qǐng)求參數(shù)集合 * @return JSONObject * @throws Exception */ public static JSONObject doGet(String url, Map<String, Object> headers, Map<String, Object> params) throws Exception { //創(chuàng)建httpClient對(duì)象 CloseableHttpClient httpClient = HttpClients.createDefault(); URIBuilder uriBuilder = new URIBuilder(url); if (params != null) { Set<Map.Entry<String, Object>> entrySet = params.entrySet(); for (Map.Entry<String, Object> entry : entrySet) { uriBuilder.setParameter(entry.getKey(), String.valueOf(entry.getValue())); } } URI uri = uriBuilder.build(); HttpGet httpGet = new HttpGet(uri); //設(shè)置參數(shù) httpGet.setConfig(RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build()); //設(shè)置請(qǐng)求頭 packageHeader(headers, httpGet); CloseableHttpResponse httpResponse = null; try { return getResponse(httpResponse, httpClient, httpGet); } finally { release(httpResponse, httpClient); } }
2、測(cè)試
Map<String,Object> headers=new HashMap<>(); headers.put("Key","換成你自己的key"); Map<String,Object> query=new HashMap<>(); query.put("city","350200"); JSONObject jsonObject = HttpUtil.doGet("https://restapi.amap.com/v3/weather/weatherInfo", headers, query); log.info(JSONUtil.toJsonStr(jsonObject));
3、結(jié)果驗(yàn)證
二、第二種方式(RestTemplate)
RestTemplate可用于微服務(wù)間的通信,也可以用于網(wǎng)絡(luò)請(qǐng)求。
其有多種提交方式,postForEntity、postForObject、postForLocation等等。
這是使用getForEntity進(jìn)行演示。
RestTemplate 的使用很靈活需要自己根據(jù)實(shí)際使用
1、調(diào)用方法
RestTemplate restTemplate = new RestTemplate(); //創(chuàng)建請(qǐng)求頭 HttpHeaders httpHeaders = new HttpHeaders(); //參數(shù) Map<String, Object> query = new HashMap<>(); query.put("city", "350200"); query.put("Key", "換成你自己的key"); HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(httpHeaders); String url = "https://restapi.amap.com/v3/weather/weatherInfo?city={city}&Key={Key}"; //請(qǐng)求地址、請(qǐng)求體以及返回參數(shù)類型 ResponseEntity<JSONObject> responseEntity = restTemplate.getForEntity(url, JSONObject.class, query); log.info(JSONUtil.toJsonStr(responseEntity));
三、第三種方式(Feign)
引入依賴
<!-- spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>4.0.0</version> </dependency>
feign是用于微服務(wù)間消費(fèi)使用的,也可以用于網(wǎng)絡(luò)請(qǐng)求。
這里的url應(yīng)該是要放在配置文件中的,為了方便這邊就直接寫死。注意FeignClient中的name要配置 不然在測(cè)試類中會(huì)報(bào)錯(cuò)
1、調(diào)用接口
/** * @author xysusj */ @FeignClient(url = "https://restapi.amap.com/v3/weather/weatherInfo",name = "weatherApi") public interface WeatherApi { /** * 獲取天氣詳情 * * @param key * @param city * @return */ @GetMapping(value = "") JSONObject getWeather(@RequestParam("Key") String key, @RequestParam("city") String city); }
到此這篇關(guān)于SpringBoot 調(diào)用外部接口的三種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)SpringBoot 調(diào)用外部接口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java解析xml的4種方式的優(yōu)缺點(diǎn)對(duì)比及實(shí)現(xiàn)詳解
這篇文章主要介紹了java解析xml的4種方式的優(yōu)缺點(diǎn)對(duì)比及實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問題
這篇文章主要介紹了解決Swagger2返回map復(fù)雜結(jié)構(gòu)不能解析的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Java隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)
這篇文章主要介紹了Java隊(duì)列數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn),隊(duì)列是一種特殊的線性表,只允許在表的隊(duì)頭進(jìn)行刪除操作,在表的后端進(jìn)行插入操作,隊(duì)列是一個(gè)有序表先進(jìn)先出,想了解更多相關(guān)資料的小伙伴可以參考下面文章的詳細(xì)內(nèi)容2021-12-12Java實(shí)現(xiàn)九九乘法表的完整實(shí)例(對(duì)齊版)
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)九九乘法表(對(duì)齊版)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java中線程組ThreadGroup與線程池的區(qū)別及示例
這篇文章主要介紹了Java中線程組與線程池的區(qū)別及示例,ThreadGroup是用來管理一組線程的,可以控制線程的執(zhí)行,查看線程的執(zhí)行狀態(tài)等操作,方便對(duì)于一組線程的統(tǒng)一管理,需要的朋友可以參考下2023-05-05spring?boot集成WebSocket日志實(shí)時(shí)輸出到web頁面
這篇文章主要為大家介紹了spring?boot集成WebSocket日志實(shí)時(shí)輸出到web頁面展示的詳細(xì)操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03如何用java對(duì)接微信小程序下單后的發(fā)貨接口
這篇文章主要介紹了在微信小程序后臺(tái)實(shí)現(xiàn)發(fā)貨通知的步驟,包括獲取Access_token、使用RestTemplate調(diào)用發(fā)貨接口、處理AccessToken緩存以及發(fā)貨成功后的提醒,需要的朋友可以參考下2025-03-03