首页 > 编程语言 >java使用http工具类调用第三方接口

java使用http工具类调用第三方接口

时间:2023-12-01 15:15:25浏览次数:35  
标签:java String url JSONObject 接口 return import http

java使用http工具类调用第三方接口

一、所需maven依赖:

  <!--json依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
            <scope>compile</scope>
        </dependency>
        <!--gson-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>
        

二、用到的http工具类:

1.hutool的HttpUtil

所需maven依赖如下:

        <!--hutool-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.2</version>
        </dependency>

2.HttpClientUtils

代码如下:

package com.pasture.pastureService.common.utils;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
 * @Classname HttpClientUtils
 * @Description http请求工具类
 * @Date 2022/3/4 18:08
 * @Created by 小郭
 */
@Slf4j
public class HttpClientUtils {

    private static RequestConfig requestConfig = null;

    static
    {
        // 设置请求和传输超时时间
        requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).build();
    }

    /**
     * post请求传输json参数
     * @param url  url地址
     * @return
     */
    public static JSONObject httpPost2(String url, JSONObject jsonParam)
    {
        // post请求返回结果
        CloseableHttpClient httpClient = HttpClients.createDefault();
        JSONObject jsonResult = null;
        HttpPost httpPost = new HttpPost(url);
        // 设置请求和传输超时时间
        httpPost.setConfig(requestConfig);
        try
        {
            if (null != jsonParam)
            {
                // 解决中文乱码问题
                StringEntity entity = new StringEntity(jsonParam.toString(), "utf-8");
                entity.setContentEncoding("UTF-8");
                entity.setContentType("application/json");
                httpPost.setEntity(entity);
            }
            CloseableHttpResponse result = httpClient.execute(httpPost);
            // 请求发送成功,并得到响应
            if (result.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
            {
                String str = "";
                try
                {
                    // 读取服务器返回过来的json字符串数据
                    str = EntityUtils.toString(result.getEntity(), "utf-8");
                    // 把json字符串转换成json对象
                    jsonResult = JSONObject.parseObject(str);
                }
                catch (Exception e)
                {
                    log.error("post请求提交失败:" + url, e);
                }
            }
        }
        catch (IOException e)
        {
            log.error("post请求提交失败:" + url, e);
        }
        finally
        {
            httpPost.releaseConnection();
        }
        return jsonResult;
    }

    /**
     * post请求传输String参数 例如:name=Jack&sex=1&type=2
     * Content-type:application/x-www-form-urlencoded
     * @param url            url地址
     * @param strParam       参数
     * @return
     */
    public static JSONObject httpPost(String url, String strParam)
    {
        // post请求返回结果
        CloseableHttpClient httpClient = HttpClients.createDefault();
        JSONObject jsonResult = null;
        HttpPost httpPost = new HttpPost(url);
        httpPost.setConfig(requestConfig);
        try
        {
            if (null != strParam)
            {
                // 解决中文乱码问题
                StringEntity entity = new StringEntity(strParam, "utf-8");
                entity.setContentEncoding("UTF-8");
                entity.setContentType("application/x-www-form-urlencoded");
                httpPost.setEntity(entity);
            }
            CloseableHttpResponse result = httpClient.execute(httpPost);
            // 请求发送成功,并得到响应
            if (result.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
            {
                String str = "";
                try
                {
                    // 读取服务器返回过来的json字符串数据
                    str = EntityUtils.toString(result.getEntity(), "utf-8");
                    // 把json字符串转换成json对象
                    jsonResult = JSONObject.parseObject(str);
                }
                catch (Exception e)
                {
                    log.error("post请求提交失败:" + url, e);
                }
            }
        }
        catch (IOException e)
        {
            log.error("post请求提交失败:" + url, e);
        }
        finally
        {
            httpPost.releaseConnection();
        }
        return jsonResult;
    }


    /**
     * 发送get请求
     * @param url 路径
     * @return
     */
    public static JSONObject httpGet(String url)
    {
        // get请求返回结果
        JSONObject jsonResult = null;
        CloseableHttpClient client = HttpClients.createDefault();
        // 发送get请求
        HttpGet request = new HttpGet(url);
        request.setConfig(requestConfig);
        try
        {
            CloseableHttpResponse response = client.execute(request);

            // 请求发送成功,并得到响应
            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
            {
                // 读取服务器返回过来的json字符串数据
                HttpEntity entity = response.getEntity();
                String strResult = EntityUtils.toString(entity, "utf-8");
                // 把json字符串转换成json对象
                jsonResult = JSONObject.parseObject(strResult);
            }
            else
            {
                log.error("get请求提交失败:" + url);
            }
        }
        catch (IOException e)
        {
            log.error("get请求提交失败:" + url, e);
        }
        finally
        {
            request.releaseConnection();
        }
        return jsonResult;
    }


}

三、代码示例如下:

package com.pasture.pastureService.modules.third;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.pasture.pastureService.common.utils.HttpClientUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * @Classname AmapSDK
 * @Description:高德地图相关接口对接
 * https://lbs.amap.com/api/track/lieying-kaifa/api/grasproad
 * 创建服务
 * 创建终端
 * 轨迹上传
 * 轨迹查询
 * @Date: 2023-11-09 14:25
 * @AUTHOR: 无泪之城
 * @Version 1.0
 */
@Slf4j
@Component
public class GdMapSDK {

    @Value("${gdMap.key}")
    private String key;//高德地图key

    @Value("${gdMap.sid}")
    private String sid;//高德猎鹰轨迹服务-服务id


    /**
     * 创建服务
     * 创建服务(sid):一个key最多能创建15个服务,创建一个就够了-【可以通过此请求,在对应的 Key 下增加 1 个 Service,Service 增加成功后会返回 Service 的 id。每个 Key 下最多注册15个 Service】
     * @return
     */
    public  Map<String,Object> createService(){
        String baseUrl = "https://tsapi.amap.com/v1/track/service/add";
        Map<String,Object> params=new HashMap<>();
        params.put("key", key);
        params.put("name", "muCaoService");
        String s = HttpUtil.post(baseUrl, params);
        Map<String, Object> resultMap=new HashMap<>();
        resultMap.put("result",s);
        return resultMap;
    }

    /**
     * 查询服务
     * @return
     */
    public  Map<String,Object> getService(){
        String baseUrl = "https://tsapi.amap.com/v1/track/service/list?key=b2944557ea0ce4b4acd6280ccd03df2c";
        JSONObject jsonObject = HttpClientUtils.httpGet(baseUrl);
        //3.对微信返回的数据进行转换
        Gson gson = new Gson();
        Map<String, Object> resultMap = gson.fromJson(String.valueOf(jsonObject), HashMap.class);
        log.info("返回用户数据:{}",resultMap);
        return resultMap;
    }

    /**
     * 创建终端(tid)
     * 创建终端(tid):一个服务下可以创建100000个终端-【 每次调用此接口,可以在指定 Service 下创建1个终端,默认最大支持创建100000个】
     * @param weChatUserId
     * @return
     */
    public  String createTerminal(String weChatUserId){
        String baseUrl = "https://tsapi.amap.com/v1/track/terminal/add";
        Map<String,Object> params=new HashMap<>();
        params.put("key", key);
        params.put("sid", sid);
        params.put("name", "terminal_"+weChatUserId);
        String result = HttpUtil.post(baseUrl, params);
        JSONObject json= JSON.parseObject(result);
        String data = json.getString("data");
        JSONObject jasonData = JSON.parseObject(data);
        String tid=jasonData.getString("tid");
        return tid;
    }

    /**
     * 查询终端(tid)
     * @return
     */
    public static Map<String,Object> getTerminal(){
        String baseUrl = "https://tsapi.amap.com/v1/track/terminal/list?key=b2944557ea0ce4b4acd6280ccd03df2c&sid=1009253";
        JSONObject jsonObject = HttpClientUtils.httpGet(baseUrl);
        //3.对微信返回的数据进行转换
        Gson gson = new Gson();
        Map<String, Object> resultMap = gson.fromJson(String.valueOf(jsonObject), HashMap.class);
        log.info("返回用户数据:{}",resultMap);
        return resultMap;
    }

    //创建轨迹(trid):【创建一条轨迹,一个终端下最多可创建500000条轨迹。】
    //轨迹点上传:在上传经纬度之前需要先通过创建轨迹接口创建一条轨迹,拿到trid,根据trid上传经纬度点;
    //轨迹查询:查询某条指定轨迹:指定服务id、终端id、轨迹id,查询指定的轨迹信息,单次最多查询一条轨迹;


//    public static void main(String[] args) {
////        Map map = GdMapSDK.createService();
////        String s = GdMapSDK.createTerminal("8888");
////                Map map = GdMapSDK.getTerminal();
////        System.out.println(s);
//    }
}

标签:java,String,url,JSONObject,接口,return,import,http
From: https://www.cnblogs.com/xiaoguo-java/p/17869718.html

相关文章

  • 复习:Java基础-泛型方法
    泛型大家都很熟悉了泛型方法呢可能很多小伙伴都有混淆,今天来稍微复习一下泛型方法(普通方法)publicclassTest<T>{publicTf(Tc){//注意声明,使此方法成为泛型方法returnc;}}泛型方法(静态方法)这么写编译就通过不了错误写法publicclassTe......
  • 关于解决vue报错"Problems loading reference 'https://schemastore.azurewebsites.ne
    打开setting时会看到有一条三角形的警告信息 看问题描述:无法从该网站加载解决方法:打开设置,找到扩展下的json项 设置之后可以在settings.json文件中看到新增加一项 "json.schemaDownload.enable":false可以直接在界面上设置: "json.schemaDownload.enable":false......
  • android开发aar包或者jar包出现类重复问题Caused by: java.lang.RuntimeException: Du
    如果是仓库依赖的方式直接使用exclude语句移除相同的依赖库即可,如下:implementation("org.java-websocket:Java-WebSocket:1.5.2"){excludegroup:'org.slf4j',module:'slf4j-api'//exclude掉websocket库依赖的slf4j库}但是如果是aar包或者jar包里面的类重复呢?这个......
  • Java--java.lang.String有个 indexOf()方法,但是要注意它是区分大小写的
    首先这个indexOf(Stringstr)方法的作用:如果要检索的字符串值没有出现,则该方法返回-1。1.如果要处理的字符串对大小写不敏感,可以将该字符串统一转成大写或者小写,然后再indexOf。例如处理:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,like......
  • Python接口自动化项目----Anan
    优点本效果展示仅是整体样式功能,更详细的使用方法和优点,需要参考使用手册。整体的优点包括:1.测试接口的统一管理2.支持多环境3.测试报告展示4.定时任务5.支持代码驱动6.便捷的交互式页面7.支持根据业务的定制化操作8.基于httprunner1.x,支持各种复杂情况下的接口测试,多依......
  • JavaScript面试题
    列举常用的字符串方法indexOf(要查找的字符,开始索引)查找某个字符串第一次出现的位置lastIndexOf(要查找的字符,开始索引)查找某个子字符串最后一次出现的位置replace(被替换的内容,要替换的内容)替换好的字符串substr(从哪个索引开始,截取多少个)返回截取到的内容subst......
  • 学习笔记3:JavaSE & API(异常处理)
    1、Java中的错误(1)所有错误的超类:Throwable(2)Throwable的子类:子类:Error,系统级别错误、运行环境错误。比如,虚拟机内存溢出。子类:Exception,异常情况,通常是逻辑问题导致的程序级别错误,可在运行期间被解决。比如,空指针,下标越界。(3)通常,程序中处理的异常都是Exception。(4)错误输出:S......
  • 【直播协议详解】RTMP、HLS、HTTP-FLV、WebRTC、RTSP的区别
    本期我们详细讨论直播的相关协议,包括:HTTP-FLV、HLS、RTMP、Web-RTC、RTSP等等。我们将会详细介绍这些协议的工作原理、应用场景、及延迟的原因。我们按这样的顺序讨论​:RTMP、HTTP-FLVHLSWeb-RTCRTSP一、RTMP、HTTP-FLV协议RTMP和HTTP-FLV都是建立在FLV封装之上的。RTM......
  • windows10 Java环境变量配置后不生效
    一、问题从jdk8升级到jdk11,配置JAVA_HOME后,不生效。(备注:jdk8是安装版,jdk11是解压版。)二、解决办法在环境变量Path中,删除下面的配置:C:\ProgramFiles(x86)\CommonFiles\Oracle\Java\javapath验证:三、原因因为使用安装版本的JDK程序时(一般是1.7版本以上),在安装结束后会自......
  • Java Learning Day3 数组
    System.out.print;  System.out.println;每输出一次就会换行Integer.parseInt字符串转intDouble.parseDouble字符串转double数组存储结构连续,存储元素类型相同,随机访问 JVMJVM栈:JVM栈正是java中方法执行时所占有的空间、局部变量会存于栈帧中堆:堆是JVM内存中最大......