RestTemplate 请求第三方网站数据 定时插入到数据库

news2024/10/5 13:48:18

目录

0 课程视频

1 RestTemplate-> 是Web Http 客户端请求 模板工具

1.1 使用RestTemplate -> 选择执行引擎 Http客户端请求工具

1.2 执行引擎 Http客户端请求工具

1.2.1 JDK HttpUrlConnection

1.2.2 Apache HttpClient

1.2.3 OkHttp 

1.2 升级版 -> WebClient -> 非阻塞

2 RestTemplate 的 GET请求 -> 定时存入数据库

2.1 RestTemplate.getForObject  获取对象

2.2 RestTemplate.getForEntity 获取 对象 状态码 请求头

2.2.1 请求获取数据

2.2.2 请求到的数据格式

2.2.3 数据格式转化 -> hutool工具包->加依赖

2.2.4 list 里数据 for循环加入数据库

2.2.5 定时请求获取数据 -> 存入数据库 -> 完整代码

3 完整

3.1 配置

3.1.1 加依赖

3.1.2 yml 配置文件--> 正常连接数据库方式

3.2 代码

3.2.1 RestDto

3.2.2 DtoMapper

3.2.3 DtoService(imp)

3.2.4 Controller

4 数据库创建表


0 课程视频

Java Web 编程 之 RestTemplate 实战全集 & SpringBoot & Spring 框架集成_哔哩哔哩_bilibiliJava Web 编程 之 RestTemplate 实战全集 & SpringBoot & Spring 框架集成共计5条视频,包括:1 SpringBoot 集成 RestTemplate、2 SpringBoot HTTP 状态码解析、3 SpringBoot RestTemplate执行Http Get请求等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV1tJ41147uj/?spm_id_from=333.337.search-card.all.click&vd_source=ff8b7f852278821525f11666b36f180a

1 RestTemplate-> 是Web Http 客户端请求 模板工具

1.1 使用RestTemplate -> 选择执行引擎 Http客户端请求工具

1.2 执行引擎 Http客户端请求工具

1.2.1 JDK HttpUrlConnection

// RestTemplate restTemplate = new RestTemplate();// 默认


RestTemplate restTemplate = new RestTemplate(new HttpComponentsClientHttpRequestFactory());

1.2.2 Apache HttpClient

1.2.3 OkHttp 

1.2 升级版 -> WebClient -> 非阻塞

2 RestTemplate 的 GET请求 -> 定时存入数据库

2.1 RestTemplate.getForObject  获取对象

2.2 RestTemplate.getForEntity 获取 对象 状态码 请求头

2.2.1 请求获取数据

String url = "https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT";
        Map<String, Long> paramMap = new HashMap<>(); // 入参 可写 可不写  这里没有入参

        ResponseEntity<HashMap> result = restTemplate.getForEntity(url, HashMap.class, paramMap);// RestDto.class 根据 这个 序列化

2.2.2 请求到的数据格式

{
"code":"0",
"msg":"",
"data":[
{"instType":"SPOT","instId":"BTC-USDT","last":"28754.7","lastSz":"0.05152543","askPx":"28754.8","askSz":"0.16142622","bidPx":"28754.7","bidSz":"0.08685457","open24h":"27951.7","high24h":"28886.3","low24h":"27662.3","volCcy24h":"278879302.893932331","vol24h":"9872.68298003","ts":"1683056681112","sodUtc0":"28073.1","sodUtc8":"28535.2"}
]
}

2.2.3 数据格式转化 -> hutool工具包->加依赖

JSONArray jsonArray = JSONUtil.parseArray(result.getBody().get("data")); // list [{},{},{}] --> list里面是字典

List<RestDto> postEntityList = jsonArray.toList(RestDto.class); // list [RestDto,RestDto,RestDto] --> list里面是实体类

2.2.4 list 里数据 for循环加入数据库

for (RestDto postEntity : postEntityList) { // 循环 取实体类list

                int xxx = dtoService.save(postEntity);
                System.out.println(xxx);

2.2.5 定时请求获取数据 -> 存入数据库 -> 完整代码

@RestController
@Component // 代表这个类确保会被springboot扫描到
public class AutoController {

    private RestTemplate restTemplate = new RestTemplate() ;
    @Resource
    private DtoService dtoService;

    @Scheduled(fixedDelay = 3000) // 定时3000ms
    public void  autoData() {

        String url = "https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT";
        Map<String, Long> paramMap = new HashMap<>(); // 入参 可写 可不写  这里没有入参

        // Map<String, Object> result = restTemplate.getForObject(url, Map.class, paramMap);// RestDto.class 根据 这个 序列化
        ResponseEntity<HashMap> result = restTemplate.getForEntity(url, HashMap.class, paramMap);// RestDto.class 根据 这个 序列化


        if(result.getStatusCode()== HttpStatus.OK) {
            JSONArray jsonArray = JSONUtil.parseArray(result.getBody().get("data")); // list [{},{},{}] --> list里面是字典

            List<RestDto> postEntityList = jsonArray.toList(RestDto.class); // list [RestDto,RestDto,RestDto] --> list里面是实体类

            for (RestDto postEntity : postEntityList) { // 循环 取实体类list

                int xxx = dtoService.save(postEntity);
                System.out.println(xxx);

            }
            
        }

    }
}

3 完整

3.1 配置

3.1.1 加依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.29</version>
        </dependency>

<!--hutool-all 各种算法-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.12</version>
        </dependency>

3.1.2 yml 配置文件--> 正常连接数据库方式

3.2 代码

3.2.1 RestDto

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("rest_dto") //连接数据库表名
public class RestDto implements Serializable {
    @TableId(value = "id", type = IdType.AUTO) // 解决 id 自动生成太大
    private Integer id; // 主键
    /**
     * SPOT
     */

    private String instType;
    /**
     * BTC-USDT
     */

    private String instId;
.
.
.
.
.
}

3.2.2 DtoMapper

@Mapper
public interface DtoMapper extends BaseMapper<RestDto> {
}

3.2.3 DtoService(imp)

@Service
@Transactional
public class DtoService {
    @Resource
    private DtoMapper dtoMapper;

    public int save(RestDto dto) { // 在controller中被调用

        int result = dtoMapper.insert(dto); // userMapper是操作数据库的方法

        return result ;

    }
}

3.2.4 Controller

@RestController
@Component // 代表这个类确保会被springboot扫描到
public class AutoController {

    private RestTemplate restTemplate = new RestTemplate() ;
    @Resource
    private DtoService dtoService;

    @Scheduled(fixedDelay = 3000) // 定时3000ms

    public void  autoData() {

        String url = "https://www.okx.com/api/v5/market/ticker?instId=BTC-USDT";
        Map<String, Long> paramMap = new HashMap<>(); // 入参 可写 可不写  这里没有入参

        // Map<String, Object> result = restTemplate.getForObject(url, Map.class, paramMap);// RestDto.class 根据 这个 序列化
        ResponseEntity<HashMap> result = restTemplate.getForEntity(url, HashMap.class, paramMap);// RestDto.class 根据 这个 序列化

        if(result.getStatusCode()== HttpStatus.OK) {
            JSONArray jsonArray = JSONUtil.parseArray(result.getBody().get("data")); // list [{},{},{}] --> list里面是字典

            List<RestDto> postEntityList = jsonArray.toList(RestDto.class); // list [RestDto,RestDto,RestDto] --> list里面是实体类

            for (RestDto postEntity : postEntityList) { // 循环 取实体类list

                int xxx = dtoService.save(postEntity);
                System.out.println(xxx);

            }

        }

    }
}

4 数据库创建表

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

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

相关文章

Android 12.0 Launcher3仿ios长按app图标实现抖动动画开始拖拽停止动画

1.概述 在12.0的系统rom定制化开发中,在对系统原生Launcher3的定制需求中,也有好多功能定制的,在ios等电子产品中 的一些好用的功能,也是可以被拿来借用的,所以在最近的产品开发需求中,需求要求模仿ios的 功能实现长按app图标实现抖动动画,接下来看如何分析该功能的实现…

Centos7快速安装Logstash 7.17.7并实现MySQL中数据导入Elasticsearch

可以通过以下命令在线安装 Logstash 7.17.7 sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo rpm -ivh https://artifacts.elastic.co/downloads/logstash/logstash-7.17.7-x86_64.rpm安装完成后&#xff0c;需要添加环境变量 export PATH$PATH:…

ARM处理器的指令集(3)

ARM处理器的指令集 一、数据处理类指令 数据处理指令只能对寄存器的内容进行操作&#xff0c;而不能对内存中的数据进行操作&#xff0c;所以ARM数据处理指令均可以选择使用S后缀&#xff0c;以影响状态标志位。 影响状态标志位的命令&#xff1a; MOVS–>数据传送指令&am…

java servlet 农机租赁网站系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java servlet 农机租赁网站系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助 系统采用 serlvetdaobean 模式开发 &#xff0c;系统具有完整的源代码和数 据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,M…

[架构之路-179]-《软考-系统分析师》-19- 系统可靠性分析与设计 -1- 故障模型、可靠性模型、可靠性分析

目录 前言&#xff1a; 1 9 . 1 系统可靠性概述 19.1.1 系统故障模型 1. 在信息系统中&#xff0c;故障或错误有如下儿种表现形式&#xff1a; 2. 故障的缘由 3. 故障模型 &#xff08;1&#xff09;逻辑电路级的故障 &#xff08;2&#xff09; 数据结构级的故障 &a…

【大数据Hadoop】HDFS3.3.1-Datanode-DataStorage的实现原理

DataStorage的实现原理 前言Storage类继承关系StorageInfoStorage.StorageStateStorage.StorageDirectory文件夹操作加锁/解锁操作存储状态恢复操作 StorageDataStorage 前言 Datanode 最重要的功能就是管理磁盘上存储的 HDFS 数据块。Datanode 将这个管理功能切分为两个部分&…

确定不进来看看吗?详细讲解C语言文件操作(示例分析每个函数)

前言 &#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:讲解c语言中的文件操作,文件的读取,输入输出,流的概念…

【分布式搜索引擎03】

分布式搜索引擎03 11.9.数据聚合11.9.1.聚合的种类11.9.2.DSL实现聚合11.9.2.1.Bucket聚合语法11.9.2.2.聚合结果排序11.9.2.3.限定聚合范围11.9.2.4.Metric聚合语法11.9.2.5.小结 11.9.3.RestAPI实现聚合11.9.3.1.API语法11.9.3.2.业务需求11.9.3.3.业务实现 11.10.自动补全&a…

AMBA协议-AXI协议详解(读写时序、Outstanding、乱序传输、原子操作)

目录 1. AXI 写通道信号 1.1. 写地址通道信号 1.2. 写数据通道信号 1.3. 写response通道信号 1.5. 握手规则 1.4. AXI 写通道之间关系 2. AXI 读通道信号 2.1. 读地址通道信号 2.2. 读数据通道信号 2.3. AXI 读通道之间关系 3. AXI传输 3.1. AXI突发读传输 3.2. …

EventBus(事件总线)的使用和源码的简单解析

Google Guava EventBus(事件总线)的使用和源码的简单解析 什么是EventBus&#xff1f; 事件总线&#xff08;EventBus&#xff09;是一种广泛用于软件架构中的设计模式&#xff0c;用于实现解耦和松散耦合的通信机制。它可以帮助组织和管理应用程序中不同组件之间的通信&…

【SQL篇】面试之高级查询和连接

603 连续空余座位 select distinct c1.seat_id from Cinema c1 join Cinema c2 on abs(c2.seat_id-c1.seat_id) 1 where c1.free1 and c2.free1 order by c1.seat_id;总结 思路&#xff1a;为什么我们这里需要abs和distinct&#xff0c;如果是如下代码&#xff0c;为什么不可…

[架构之路-178]-《软考-系统分析师》-17-嵌入式系统分析与设计- 3- 分区操作系统(Partition Operating System)概述

目录&#xff1a; 本文概述&#xff1a; 1.1 什么是分区操作系统 1.2 分区操作系统出现背景 1. 前后台系统(Foreground/Background System) 2. 实时操作系统(RTOS) 本文概述&#xff1a; 随着嵌入式系统日趋复杂化以及对安全性要求的不断提高&#xff0c;采用空间隔离、时…

[计算机图形学]光场,颜色与感知(前瞻预习/复习回顾)

一、Light Field / Lumigraph—光场 1.我们看到的是什么 我们的眼睛能够把3D世界转换为2D的成像信号被我们感知&#xff0c;如上面第一幅图&#xff0c;这就是我们看到整个世界的过程&#xff0c;那么如果我们把之前记录的光的信息都完美的放在一个幕布上&#xff0c;那么我们…

第15章 信息(文档)和配置管理

文章目录 软件文档的分类&#xff08;1&#xff09;开发文档&#xff1a;描述开发过程 本身&#xff08;2&#xff09;产品文档&#xff1a;描述开发过程的 产物&#xff08;3&#xff09;管理文档&#xff1a;记录项目管理的信息 文档的质量可以分为四级&#xff08;1&#xf…

第二十五章 刚体Rigidbody

在物理学中&#xff0c;静止和匀速直线运动是物体的平衡状态&#xff0c;如果给该物体施加某一个力的话&#xff0c;物体的平衡状态就会改变&#xff0c;当然这个真理的前提是理想状态。我们知道在现实世界中&#xff0c;由于重力和摩擦力的存在&#xff0c;任何一个物体都不可…

【SQL篇】窗口函数和公共表达式

1077 项目员工 III # Write your MySQL query statement below select project_id, employee_id from (select project_id, e.employee_id, rank() over(partition by project_id order by experience_years desc) as rkfrom Employee ejoin Project pon e.employee_id p.empl…

【Fluent】接着上一次计算的结果继续计算,利用计算过程中得到的物理场(温度、速度、压力等)插值Interpolate文件初始化模型的方法

一、问题背景 因为fluent中支持的初始化无非三种类型。 1、Standard initialization 标准初始化 2、Hybridinitialization 混合初始化 3、FMG initialization FMG初始化 另外&#xff0c;还可以用UDF通过坐标判断的方式予以初始化。 但是这些初始化方法都没办法利用以前计算过…

通关MyBatis(上)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;spring框架 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 什么是MyBatis 如何使用Mybatis 添加依赖 创建数据库 配置数据库连接字符串 MyBatis的操作流程 数据持久层 配置mybatis的xml文件 mapp…

Windows自动虚拟机WSL和VMware虚拟机兼容问题(此平台不支持虚拟化的 Intel VT-x/EPT)

问题背景与原因分析 在安装了WSL2之后&#xff0c;忽然发现VMware Workstation无法正常启动了。就是在开启虚拟机时遇到了这种情况&#xff1a; “ 此平台不支持虚拟化的 Intel VT-x/EPT” 问题描述&#xff1a;出现以上问题&#xff0c;发现WSL2和 VMware Workstation 是不兼…

idea使用git遇到的小问题

idea使用git遇到的小问题 前置说明颜色含义中文插件修改提交的用户名 前置说明 idea版本为2022专业版 github需要自己会科学上网 颜色含义 在idea中使用github后&#xff0c;会发现项目中会有各种各样的颜色&#xff0c;如图所示文件全为绿色 这颜色含义分别为&#xff1a;…