自定义注解@EnableHikHttpRequest、@HikHttp、@HikHttpRequest 实现对海康平台接口访问

简介: spring boot自定义注解封装对海康SDK的请求,不用写实现类。有时间的老铁也可改造成适用所有平台
完整代码
  • 对接海康开放平台通常,先引入SDK,然后更具API文档去写需要的实现类接口,接口里面拼接各种参数,然后调用SDK返回太烦了,代码不够简洁,受到Feign启发,将对海康平台接口访问封装成注解的形式
@HikHttp
public interface HikPlatformApiService {

    @HikHttpRequest(value = HikApiConstant.personList, method = HttpMethod.POST)
    public HikVo createNetEaseAcc(Map params);

}

image.png

-传统的调用方式

`

/**
 * 调用POST接口,返回图片
 * 接口实际url:https://ip:port/artemis/api/visitor/v1/record/pictures
 * @return
 */
public static String callPostImgs() throws Exception {
    ArtemisConfig config = new ArtemisConfig();
    config.setHost("127.0.0.1"); // 代理API网关nginx服务器ip端口
    config.setAppKey("20469790");  // 秘钥appkey
    config.setAppSecret("lofnD6DbnBllHmk5YOyx");// 秘钥appSecret
    final String getSecurityApi = "/artemis" + "/api/visitor/v1/record/pictures"; // 接口路径
    Map<String, String> path = new HashMap<String, String>(2) {
        {
            put("https://", getSecurityApi);
        }
    };
    Map<String, String> head = new HashMap<String, String>(2) {  //get请求的head参数
        {
            put("headpost", "sky-test");
        }
    };
    Map<String, String> query = new HashMap<String, String>(2) {  //get请求的head参数
        {
            put("domainId", "0");
        }
    };
    JSONObject jsonBody = new JSONObject();
    jsonBody.put("svrIndexCode", "9ff58bc2-65a5-464b-b28c-daea67ba9569");
    jsonBody.put("picUri", "/pic?9dda12i40-e*5b84626c4105m5ep=t=i3p*i=d1s*i=d3b*i1d3b*855925cea-96008b--2718943z855s=5i76=");
    String body = jsonBody.toJSONString();
    //参数根据接口实际情况设置
    HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, query, null,"application/json",head);
    try {
        HttpResponse resp = result;
        if (302==resp.getStatusLine().getStatusCode()) {
            /*
            获取图片数据保存到本地
            注:1.对于有时效的图片,必须尽快保存到本地
               2.若无时效,则可以直接保存location,后续自行访问获取
             */
            Header header=  resp.getFirstHeader("location");
            String  newUrl = header.getValue();
            HttpGet httpget = new HttpGet(newUrl);
            HttpClient httpClient = wrapClient(httpget.getURI().getScheme()+"://"+httpget.getURI().getHost());
            HttpResponse execute = httpClient.execute(httpget);
            HttpEntity entity = execute.getEntity();
            InputStream in = entity.getContent();
            Tools.savePicToDisk(in, "d:/", "test311.jpg");
        }else{
            System.out.println("下载出错");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return getSecurityApi;
}

public static void main(String[] args) throws Exception {
    String result = callPostApiGetOrgList();
    System.out.println(result);
    String VechicleDataResult = callPostApiGetRegions();
    System.out.println(VechicleDataResult);
}

}
`

  • 使用注解后,简洁明了

image.png

  • 使用
    先在启动类上加上@EnableHikHttpRequest("com.coder.gctool.test")注解,和对应要扫描的包
    然后在该包下写接口
    image.png

接口上添加@HikHttp注解,方法上添加 @HikHttpRequest注解就完成了
-测试
image.png

目录
相关文章
接口规范 9. 推流认证相关接口
9 推流认证相关接口 9.1.开启推流认证 用途针对某个应用,开启推流认证。开启推流认证后,所有向该应用下的推送直播流的请求都需要做合法性认证,只有认证通过的请求才会允许推送。认证的方法包括token认证和第三方认证。
1228 0
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
|
7月前
|
前端开发 API Docker
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
97 0
|
7月前
|
缓存 负载均衡 安全
探索API接口开发(定制与开发接口)
在当今数字化、互联互通的时代,API(应用程序编程接口)已经成为连接不同软件、服务和应用的关键桥梁。API接口开发,作为软件架构和系统设计的重要组成部分,不仅影响着数据交换的效率,更决定了整个系统的灵活性和可扩展性。本文将深入探讨API接口开发的各个方面,包括其重要性、开发流程、最佳实践以及面临的挑战。
|
7月前
|
前端开发
调用百度文字转语音接口实现自动报时的解决方案
调用百度文字转语音接口实现自动报时的解决方案
107 0
|
Dubbo Java 应用服务中间件
和外部系统如何对接?Spring Boot 项目调用外部接口的 3 种方式
和外部系统如何对接?Spring Boot 项目调用外部接口的 3 种方式
|
API C#
【C#编程最佳实践 二十三】如何将接口生成接口文档
【C#编程最佳实践 二十三】如何将接口生成接口文档
398 0
【C#编程最佳实践 二十三】如何将接口生成接口文档
|
安全 Java API
一口气整理三种不同运营商要素验证API的Java 接入代码
一口气整理三种不同运营商要素验证API的Java 接入代码
654 0
|
SQL Oracle 关系型数据库
接口大师v3.13更新:支持一键导入swagger,即刻开放内部API接口
接口大师v3.13更新:支持一键导入swagger,即刻开放内部API接口