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); }
到此这篇关于SpringBoot 调用外部接口的三种实现方法的文章就介绍到这了,更多相关SpringBoot 调用外部接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java NIO.2 使用Path接口来监听文件、文件夹变化
Java7对NIO进行了大的改进,新增了许多功能,接下来通过本文给大家介绍Java NIO.2 使用Path接口来监听文件、文件夹变化 ,需要的朋友可以参考下2019-05-05解决使用stream将list转map时,key重复导致报错的问题
这篇文章主要介绍了解决使用stream将list转map时,key重复导致报错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-06-06
最新评论