SpringBoot 調用外部接口
前言
一個系統(tǒng)肯定少不了要和外部系統(tǒng)進行通信,所以就必須得訪問外部接口。
本次演示的是使用的是高德天氣api接口
一、第一種方式(HttpClient等)
使用插件方式,比如自帶的HttpClient,或者OkHttp,甚至是原生的HttpURLConnection 等等,這里以HttpClient為例。
1、封裝工具類
簡單封裝的get請求
/**
* 發(fā)送get請求:帶請求頭和請求參數(shù)
*
* @param url 請求地址
* @param headers 請求頭
* @param params 請求參數(shù)集合
* @return JSONObject
* @throws Exception
*/
public static JSONObject doGet(String url, Map<String, Object> headers, Map<String, Object> params) throws Exception {
//創(chuàng)建httpClient對象
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ù)
httpGet.setConfig(RequestConfig.custom().setConnectTimeout(CONNECT_TIMEOUT).setSocketTimeout(SOCKET_TIMEOUT).build());
//設置請求頭
packageHeader(headers, httpGet);
CloseableHttpResponse httpResponse = null;
try {
return getResponse(httpResponse, httpClient, httpGet);
} finally {
release(httpResponse, httpClient);
}
}
2、測試方法
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、結果驗證
二、第二種方式(RestTemplate)
RestTemplate可用于微服務間的通信,也可以用于網絡請求。
其有多種提交方式,postForEntity、postForObject、postForLocation等等。
這是使用getForEntity進行演示。RestTemplate 的使用很靈活需要自己根據(jù)實際使用
1、調用方法
RestTemplate restTemplate = new RestTemplate();
//創(chuà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}";
//請求地址、請求體以及返回參數(shù)類型
ResponseEntity<JSONObject> responseEntity = restTemplate.getForEntity(url, JSONObject.class, query);
log.info(JSONUtil.toJsonStr(responseEntity));
2、結果驗證
三、第三種方式(Feign)
引入依賴
<!-- spring-cloud-starter-openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>4.0.0</version>
</dependency>
feign是用于微服務間消費使用的,也可以用于網絡請求。
這里的url應該是要放在配置文件中的,為了方便這邊就直接寫死。注意FeignClient中的name要配置 不然在測試類中會報錯
文章來源:http://www.zghlxwxcb.cn/news/detail-491519.html
1、調用接口
/**
* @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);
}
2、結果驗證
文章來源地址http://www.zghlxwxcb.cn/news/detail-491519.html
總結
這里只是簡單介紹三種比較常用的對外請求接口的方式,這里都是簡單的get請求,還有很多比較復雜的請求,post的json格式
或者表單格式,以及文件流等等,在實際的業(yè)務場景中需要自己去完善。
到了這里,關于SpringBoot 調用外部接口的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!