SpringBoot 调用外部接口
一、第一种方式(HttpClient等)
使用插件方式,比如自带的HttpClient,或者OkHttp,甚至是原生的HttpURLConnection 等等,这里以HttpClient为例。
1、封装工具类
简单封装的get请求
/*** 发送get请求:带请求头和请求参数** @param url 请求地址* @param headers 请求头* @param params 请求参数集合* @return JSONObject* @throws Exception*/public static JSONObject doGet(String url, Map<String, Object> headers, Map<String, Object> params) throws Exception {//创建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);//设置参数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 的使用很灵活需要自己根据实际使用
1、调用方法
RestTemplate restTemplate = new RestTemplate();//创建请求头HttpHeaders httpHeaders = new HttpHeaders();//参数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}";//请求地址、请求体以及返回参数类型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是用于微服务间消费使用的,也可以用于网络请求。
这里的url应该是要放在配置文件中的,为了方便这边就直接写死。
注意FeignClient中的name要配置 不然在测试类中会报错
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);
}