SpringBoot 调用外部接口

SpringBoot 调用外部接口

一、第一种方式(HttpClient等)

使用插件方式,比如自带的HttpClient,或者OkHttp,甚至是原生的HttpURLConnection 等等,这里以HttpClient为例。

1、封装工具类

简单封装的get请求

java 复制代码
    /**
     * 发送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、测试

java 复制代码
   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、调用方法

java 复制代码
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)

引入依赖

java 复制代码
<!-- 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、调用接口

java 复制代码
/**
 * @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);
}
相关推荐
折哥的程序人生 · 物流技术专研4 小时前
Java面试85题图解版 · 特别篇:2026后端高频面试题复盘(算法底层逻辑+高并发架构设计全解析,附Java实战代码)
java·网络·数据库·算法·面试
AOwhisky4 小时前
Redis 学习笔记(第三期):持久化与主从复制
运维·数据库·redis·笔记·学习·云计算
GoGeekBaird4 小时前
从 Prompt Engineering 到 Loop Engineering,我觉得 AI 开发这事儿终于开始变味了
后端·github
李白的天不白4 小时前
数据库连接报错问题
数据库
一条泥憨鱼4 小时前
【Redis】数据类型和常用命令
java·数据库·redis·后端·缓存
爱喝水的鱼丶5 小时前
SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解
服务器·数据库·性能优化·sap·abap
Oneslide5 小时前
初始化微信小程序
后端
大白要努力!5 小时前
MySQL 8.0 + Navicat 完整操作指南
数据库·mysql
hboot6 小时前
AI工程师第一课 - Python
前端·后端·python
阿正的梦工坊6 小时前
【Rust】12-借用检查器与非词法生命周期
开发语言·后端·rust