Hutool工具包:http客户端工具(使用教程)

news2024/12/24 2:50:25

目录

一、Hutool介绍

二、笔者的话

三、引入依赖

四、大致步骤

五、GET请求

5.1 代码

5.2 结果展示

六、POST请求

6.1 代码一(Form Data类型参数)

6.2 结果展示

6.3 代码二(Form Data类型参数 - 含上传文件)

6.4 结果展示

6.5 代码三 (Request Payload,即JSON格式的参数)

6.6 结果展示

七、处理响应主体(JSON工具的使用)


一、Hutool介绍

以下来自官网🚚🚚🚚:Hutool参考文档

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

Hutool名称的由来

Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。

二、笔者的话

如何使用其实官网文档已经很详细了,我为什么要单独写一篇教程,主要目的是方便个人巩固熟练,如果也能帮助到你,那是我的荣幸!❤️💛💙💚💜🤎

三、引入依赖

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

四、大致步骤

  1. 构建一个http请求 - 请求的哪个地址
  2. 设置请求方式、请求头、请求参数等信息
  3. 执行请求,返回一个http响应类
  4. 然后通过这个相应类可以获取响应的主体、cookie、是否请求成功等信息
  5. 要获取具体某些信息,主要就是在主体上进行操作了

五、GET请求

5.1 代码

    @GetMapping("test")
    public Result<String> test(String username,String password){
        return Result.success(username + "    " + password);
    }
public static void main(String[] args){
        // 1. 创建HttpRequest对象 - 指定好 url 地址
        HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/test/test");
        // 2. 设置请求方式,默认是GET请求
        httpRequest.setMethod(Method.GET);
        // 3. 设置请求参数   可通过 form表单方法 设置
        //    form方法有很多重载方法,可以一个一个参数设置,也可以将参数封装进一个map集合然后一块儿传
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("username","牛飞");
        httpRequest.form(paramsMap);
        httpRequest.form("password", "123456");
        httpRequest.form("username","阿祖");
        // 4. 设置请求头
        //    请求头同样可以逐一设置,也可以封装到map中再统一设置
        //    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明
        httpRequest.header("x-c-authorization","yourToken");
        // 5. 执行请求,得到http响应类
        HttpResponse execute = httpRequest.execute();

        // 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息
        boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内
        System.out.println(ok);
        List<HttpCookie> cookies = execute.getCookies();// 获取所有cookie
        cookies.forEach(System.out::println); // 如果为空不会遍历的
        String body = execute.body();   // 获取响应主体
        System.out.println(body);
    }

5.2 结果展示

六、POST请求

6.1 代码一(Form Data类型参数)

    @LogAnnotation(module = "宠物分类",operation = "根据条件查询指定宠物分类信息")
    @ApiOperation("根据条件查询指定宠物分类信息")
    @PostMapping("/findPetCategoryListQuery")
    public Result<List<PetCategoryVo>> findPetCategoryListQuery(@RequestParam("parentId") int parentId ,@RequestParam("hotFlag") int hotFlag ){
        List<PetCategoryVo> list = petCategoryService.findPetCategoryListQuery(parentId,hotFlag);
        return Result.success(list);
    }
public static void main(String[] args) {
        // 1. 创建HttpRequest对象 - 指定好 url 地址
        HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/pethome/pet-category/findPetCategoryListQuery");
        // 2. 设置请求方式,默认是GET请求
        httpRequest.setMethod(Method.POST);
        // 3. 设置请求参数   可通过 form表单方法 设置
        //    form方法有很多重载方法,可以一个一个参数设置,也可以将参数封装进一个map集合然后一块儿传
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("parentId","1");
        paramsMap.put("hotFlag","1");
        httpRequest.form(paramsMap);
        // 4. 设置请求头
        //    请求头同样可以逐一设置,也可以封装到map中再统一设置
        //    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明
        httpRequest.header("x-c-authorization","yourToken");
        // 5. 执行请求,得到http响应类
        HttpResponse execute = httpRequest.execute();

        // 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息
        boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内
        System.out.println(ok);
        List<HttpCookie> cookies = execute.getCookies();// 获取所有cookie
        cookies.forEach(System.out::println); // 如果为空不会遍历的
        String body = execute.body();   // 获取响应主体
        System.out.println(body);
    }

6.2 结果展示

true
{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}

6.3 代码二(Form Data类型参数 - 含上传文件)

    @ApiOperation("测试上传文件")
    @PostMapping("uploadTest")
    public Result<String> uploadTest(@RequestParam("image")MultipartFile file){
        // 获取原始文件名称:如 aa.png
        String originalFilename = file.getOriginalFilename();
        // 修改成唯一的名称
        originalFilename = UUID.randomUUID().toString().substring(0,8) + "." + originalFilename;
        // 上传
        boolean uploadFlag = qiniuUtils.upload(file, originalFilename);
        if (uploadFlag){
            return Result.success(qiniuUtils.url + originalFilename);
        }else {
            return Result.fail();
        }

    }
public static void main(String[] args) {
        // 1. 创建HttpRequest对象 - 指定好 url 地址
        HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/test/uploadTest");
        // 2. 设置请求方式,默认是GET请求
        httpRequest.setMethod(Method.POST);
        // 3. 设置请求参数 可通过 form表单方法 设置   可以是文件类型
        //    form方法有很多重载方法,可以一个一个参数设置,也可以将参数封装进一个map集合然后一块儿
        File file = new File("C:\\Users\\hssym\\Downloads\\UBQ.png");
        httpRequest.form("image",file);
        // 4. 设置请求头
        //    请求头同样可以逐一设置,也可以封装到map中再统一设置
        //    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明
        httpRequest.header("x-c-authorization","yourToken");
        // 5. 执行请求,得到http响应类
        HttpResponse execute = httpRequest.execute();

        // 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息
        boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内
        System.out.println(ok);
        List<HttpCookie> cookies = execute.getCookies();// 获取所有cookie
        cookies.forEach(System.out::println); // 如果为空不会遍历的
        String body = execute.body();   // 获取响应主体
        System.out.println(body);
    }

6.4 结果展示

6.5 代码三 (Request Payload,即JSON格式的参数)

和代码一、代码二不同的是,这次我们前后端约定通过json的格式传递参数。

此时不能再用form方法设置参数了,需要改用它提供的body方法。

    @LogAnnotation(module = "宠物分类",operation = "根据条件查询指定宠物分类信息")
    @ApiOperation("根据条件查询指定宠物分类信息")
    @PostMapping("/findPetCategoryListQuery")
    public Result<List<PetCategoryVo>> findPetCategoryListQuery(@RequestBody QueryPetCategoryForm form){
        List<PetCategoryVo> list = petCategoryService.findPetCategoryListQuery(form);
        return Result.success(list);
    }
public static void main(String[] args) {
        // 1. 创建HttpRequest对象 - 指定好 url 地址
        HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/pethome/pet-category/findPetCategoryListQuery");
        // 2. 设置请求方式,默认是GET请求
        httpRequest.setMethod(Method.POST);
        // 3. 设置请求参数   前后端约定通过json格式传递参数,此时就不能用form方法了,改用它提供的body方法
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("parentId","1");
        paramsMap.put("hotFlag","1");
        String paramsJson = JSON.toJSONString(paramsMap);
        httpRequest.body(paramsJson);// 需要转成json字符串
        // 4. 设置请求头
        //    请求头同样可以逐一设置,也可以封装到map中再统一设置
        //    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明
        httpRequest.header("x-c-authorization","yourToken");
        // 5. 执行请求,得到http响应类
        HttpResponse execute = httpRequest.execute();

        // 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息
        boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内
        System.out.println(ok);
        List<HttpCookie> cookies = execute.getCookies();// 获取所有cookie
        cookies.forEach(System.out::println); // 如果为空不会遍历的
        String body = execute.body();   // 获取响应主体
        System.out.println(body);
    }

6.6 结果展示

true
{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}

ok,以上不管哪种请求,基本的方法是不变的,触类旁通。

七、处理响应主体(JSON工具的使用)

我们以post请求的代码三为例,它得到的响应主体结构如下:

{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}

有了它,我们就能获取有关的数据了。这主要就是JSON工具的使用了。

我习惯上用fastjson,下述案例就以fastjson工具进行处理:

现在,我们希望获取到所有的分类名称

    public static void main(String[] args) {
        HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/pethome/pet-category/findPetCategoryListQuery");
        httpRequest.setMethod(Method.POST);
        Map<String, Object> paramsMap = new HashMap<>();
        paramsMap.put("parentId","1");
        paramsMap.put("hotFlag","1");
        String paramsJson = JSON.toJSONString(paramsMap);
        httpRequest.body(paramsJson);// 需要转成json字符串
        httpRequest.header("x-c-authorization","yourToken");
        HttpResponse execute = httpRequest.execute();

        // 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息
        if (execute.isOk()){
            String body = execute.body();   // 获取响应主体
            System.out.println(body);

            JSONObject bodyJsonObject = JSON.parseObject(body);// 将获取的响应主体解析成json对象
            JSONArray dataJsonArray = bodyJsonObject.getJSONArray("data"); // 从json对象中获取指定属性的值,并将其转换成json数组(前提是该属性的值是数组结构)

            if (dataJsonArray != null){
                for (int i = 0; i < dataJsonArray.size(); i++) {
                    JSONObject dataItemJsonObject = dataJsonArray.getJSONObject(i); // 从json数组中获取json对象
                    String categoryName = dataItemJsonObject.getString("categoryName"); // 从json对象中获取指定属性的值
                    System.out.println(categoryName);
                }
            }
        }
        
    }
{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}
美国短尾猫
俄罗斯蓝猫
布偶猫
英国短尾猫
波斯猫
苏格兰折耳猫
暹罗猫
咖啡猫

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea设置项目启动的JVM运行内存大小

idea设置项目启动的JVM运行内存大小 场景 在开发当中&#xff0c;idea默认服务启动要占用1G内存。其实每个项目本地开发和调试的时候&#xff0c;根本不需要1G内存&#xff0c;200M左右足以 如果在微服务体系下&#xff0c;那效果更明显&#xff0c;相同的内存可以启动更多的…

Linux学习之Redis集群部署

Redis集群部署 准备集群环境 创建集群 # 准备集群环境--配置192.168.88.51(host51) [rootlocalhost ~]# yum install -y redis [roothost51 ~]# vim /etc/redis.conf bind 192.168.88.51 cluster-enabled yes cluster-config-file nodes-6379.conf cluster-node-timeout 5000…

Java web基础知识

Servlet Servlet是sun公司开发的动态web技术 sun在API中提供了一个接口叫做 Servlet &#xff0c;一个简单的Servlet 程序只需要完成两个步骤 编写一个实现了Servlet接口的类 把这个Java部署到web服务器中 一般来说把实现了Servlet接口的java程序叫做&#xff0c;Servlet 初步…

成功的海外网红营销:文化和价值观冲突的应对策略

随着全球数字化和社交媒体的崛起&#xff0c;海外网红营销已经成为企业推广产品和服务的一种重要方式。然而&#xff0c;这种全球性的营销活动也伴随着文化和价值观的多样性&#xff0c;容易导致潜在的冲突和误解。为了取得成功并避免不必要的争议&#xff0c;企业需要深入了解…

从B-21轰炸机看美空军作战战略趋势

源自&#xff1a;北京蓝德信息科技有限公司 图注&#xff1a;The B-21 Raider was unveiled to the public at a ceremony Dec. 2, 2022, in Palmdale, Calif. (U.S. Air Force photo) (一)B-21开发进展 (二)B-21性能研判 声明:公众号转载的文章及图片出于非商业性的教育和科研…

2023 RISC-V 中国峰会 演讲幻灯片和视频回放 均已公开

安全之安全(security)博客目录导读 目录 一、幻灯片地址 二、演讲视频 一、幻灯片地址&#xff1a; GitHub - cnrv/RVSC2023: RISC-V Summit China 2023 二、演讲视频&#xff1a; RISCV国际基金会的个人空间-RISCV国际基金会个人主页-哔哩哔哩视频 参考&#xff1a;CNRV …

python+django社区医院诊所医疗管理系统_6t4o8

技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vueCSSpythonScriptjQueryelementui 开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCh…

计算机专业毕业设计项目推荐05-共享汽车管理系统(SpringBoot+Js+Mysql)

共享汽车管理系统&#xff08;SpringBootJsMysql&#xff09; **介绍****系统总体开发情况-功能模块****各部分模块实现** 介绍 本系列(后期可能博主会统一为专栏)博文献给即将毕业的计算机专业同学们,因为博主自身本科和硕士也是科班出生,所以也比较了解计算机专业的毕业设计…

解码知识图谱:从核心概念到技术实战

目录 1. 概述什么是知识图谱知识图谱与自然语言处理的关系 2. 发展历程语义网络本体论大数据时代的知识图谱知识图谱与深度学习的融合 3. 研究内容知识图谱的建模与表示知识抽取知识图谱的融合与对齐知识图谱的推理知识图谱的评估与验证 4. 知识图谱表示与存储RDF&#xff1a;一…

基于java SpringBoot和HTML实验室预约管理系统设计

摘要 实验室信息管理系统是利用计算机网络技术、数据存储技术、快速数据处理技术对实验室进行全方位管理的计算机软件系统。实验室信息管理系统从最初仅完成数据存储和有限的网络功能&#xff0c;发展到现在可以处理海量数据&#xff0c;具备完善的管理职能&#xff0c;并且能够…

JavaScript中的浅拷贝与深拷贝

前言 JavaScript中的浅拷贝和深拷贝是非常重要的概念&#xff0c;它们在处理对象和数组时具有不同的作用。在编程中&#xff0c;经常需要复制数据以便进行各种操作&#xff0c;但必须注意拷贝的方式&#xff0c;以确保得到预期的结果。 浅拷贝是创建一个新对象或数组&#xf…

D*算法图文详解

前面学习了Dijkstra以及A* 算法的基本原理&#xff0c;对于这两种算法而言&#xff0c;我们都能在有解的情况下找到一条沿着起点到达终点的路径。然而&#xff0c;这两个算法本身都是基于静态地图的&#xff0c;也就是说&#xff1a;当机器人找到路径后开始沿着起点向终点运动的…

不断探索创新 促进中国信息技术发展——南京宏控科技有限公司董事长应富忠

应富忠&#xff0c;男&#xff0c;现任南京宏控科技有限公司董事长、电子系统工程高级工程师&#xff08;技术五级&#xff09;、自动化系统注册工程师&#xff0c;先后被评为“研究所级青年突击手”、“研究所级先进工作者”、“研究所级优秀共产党员”、“南京市级考级优秀”…

微服务保护-授权规则/规则持久化

授权规则 基本规则 授权规则可以对调用方的来源做控制&#xff0c;有白名单和黑名单两种方式。 白名单&#xff1a;来源&#xff08;origin&#xff09;在白名单内的调用者允许访问 黑名单&#xff1a;来源&#xff08;origin&#xff09;在黑名单内的调用者不允许访问 点…

未解之迷——晶振问题导致SWD烧录时芯片no target connected,切换内部晶振后解决了

我所讲的情况是网上总结之外的另一种情况。不是Reset 后卡时间烧录&#xff0c;也不是烧录器问题&#xff0c;引脚问题等。而是STM32CubeMX软件生成问题。 芯片&#xff1a;STM32F103C8T6 某天我做了一块板子&#xff0c;按正常流程烧录&#xff0c;第一次可以烧录&#xff0c…

让Pegasus天马座开发板吃上STM8S标准库

WeCanStudio官方仓库的示例工程,只提供基于STM8S003寄存器方式来开发Pegasus天马座开发板。在此,我将基于官方的工程示例&#xff0c;将STM8S标准库移植到工程中。 先上图&#xff0c;看运行结果: main.c文件 #include "config.h" #include "delay.h"#de…

灯具欧盟CE认证,EMC/LVD/MD等欧盟指令介绍

CE认证产品范围 ​1.灯具类产品; ​2.家用电器设备、电动工具; ​3.个人电脑及其周边设备; ​4.音视频产品; ​5.无线产品; ​6.通讯类类产品; ​7.玩具类产品; ​8.安防产品; ​9.工业机械。 CE认证所需资料 ​1.一般2-3个测试样品; ​2.电路原理图; ​3.产品说明…

基于哈希表对unordered_map和unordered_set的封装

本章完整代码gitee仓库&#xff1a;对unordered_map和unordered_set的封装、unordered_map和unordered_set源码 文章目录 &#x1f36d;1. 哈希表的改造&#x1f36c;1.1 模板参数的改造&#x1f36c;1.2 增加迭代器&#x1f36c;1.3 返回值的修改 &#x1f37c;2. 对unordered…

[计算机入门] 电源选项设置

3.10 电源选项设置 有时候我们的电脑一段时间没有用&#xff0c;会自己关掉屏幕或者直接睡眠&#xff0c;这是电源选项没有设置好导致的。 1、打开控制面板&#xff0c;打开其中的电源选项 2、点击左侧上方的选择关闭显示器的时间 3、进入到编辑计划设置界面&#xff0c;在…

听GPT 讲Istio源代码--pilot(6)

在 Istio 中&#xff0c;Pilot 是 Istio 控制平面的一个重要组件&#xff0c;它具有以下作用&#xff1a; 流量管理: Pilot 负责管理和配置服务之间的网络流量。它通过与底层的服务发现机制&#xff08;如 Kubernetes 或 Consul&#xff09;集成&#xff0c;监测服务注册和注销…