springboot工程中调用第三方接口json数据定时存入数据库

👏作者简介:大家好,我是Rockey,不知名企业的不知名Java开发工程师
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
📝联系方式:he18339193956,加我进群,大家一起学习,一起读书,一起对抗互联网寒冬👀

参考
springboot实现调用第三方接口获取数据并存入数据

第一步,首先访问接口获取接口里面的json数据

restTemplate 调用第三方接口获取json数据

第二步,解析json数据

jsonobject解析json字符串

第三步,存入数据库

首先介绍我用的是后端是MyBatisPlus来与数据库进行交互
不懂的可以参考的
MyBatisPlus基本入门------连接数据库查询 -----BaseMapper基本操作

首先在数据库中创建对应的表

CREATE TABLE `demo` (

  `id` CHAR(19) NOT NULL COMMENT '主键',
  `x_dis` INT(11) NOT NULL DEFAULT '0' COMMENT 'x轴',
  `y_dis` INT(11) NOT NULL DEFAULT '0' COMMENT 'y轴',
  `h_dis` INT(11) NOT NULL DEFAULT '0' COMMENT 'h轴',
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='网站统计日数据';

第二步
创建对应的entity

package com.chx.disService.entity;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="StatisticsDisplacement对象", description="网站统计日数据")
public class demo implements Serializable {
    private static final long serialVersionUID = 1L;

    @ExcelProperty("id")
    @ApiModelProperty(value = "主键")
    @TableId(value = "id", type = IdType.ID_WORKER_STR)
    private String id;

    @ExcelProperty("X轴位移")
    @ApiModelProperty(value = "X轴位移")
    private Integer xDis;

    @ExcelProperty("Y轴位移")
    @ApiModelProperty(value = "Y轴位移")
    private Integer yDis;

    @ExcelProperty("H轴位移")
    @ApiModelProperty(value = "H轴位移")
    private Integer hDis;



}

第三步创建对应的mapper

package com.chx.disService.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chx.disService.entity.demo;

public interface demoMapper extends BaseMapper<demo> {

}

mapper对应的xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.chx.disService.mapper.demoMapper">

</mapper>

然后就可以用demoMapper了

 //这个如果报错不影响运行
    @Autowired
    private demoMapper demoMapper;

    @PostMapping(value = "/test3PostApi")
    public Object testPost1(@RequestBody JSONObject param) throws URISyntaxException {
        QueryWrapper<demo> queryWrapper = new QueryWrapper<>();

//
        RestTemplate restTemplate = new RestTemplate();
        URI uri = new URI("自己的接口地址");
//        String appCode = "52cc0ea3aaf24eb7a1250f327fea9f25";
        HttpHeaders headers = new HttpHeaders();
        //设置请求头为json格式
        headers.set("Accept-Charset", "UTF-8");
        headers.set("Content-Type", "application/json; charset=utf-8");
//        headers.add("Authorization", "APPCODE " + appCode);
        //添加参数,因为HttpEntity里面的参数是MultiValueMap类型的,所以使用这个map集合
        MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
        map.add("id","自己的参数");
        map.add("beginDate", "自己的参数");
        map.add("endDate", "自己的参数");
        map.add("version", "自己的参数");
        map.add("sign", "自己的参数");



        //添加请求的实体类,这里第一个参数是要发送的参数,第二个参数是请求头里的数据
        HttpEntity<Object> requestEntity = new HttpEntity<>(map, headers);
        //跟下面使用交换机的方法结果一样

        //第一种方法
        String s = restTemplate.postForObject(uri, requestEntity, String.class);
        //jsonObject就是获取数据的json数据
        JSONObject jsonObject = JSON.parseObject(s);
        System.out.println(jsonObject);
       /*
        //第二种方法
        //发送post请求
        ResponseEntity<String> exchange = restTemplate.exchange(uri, HttpMethod.POST, requestEntity, String.class);
        //将返回的值转换为json数据
        JSONObject jsonObject = JSON.parseObject(exchange.getBody());
        System.out.println(jsonObject);
        */
       //封装接口数据到数据库
//        JSONObject result = jsonObject.getJSONObject("code");
//        System.out.println(result);
        //解析json数据里面的数组
        //这个就是得到json数据里面的basedata数组
        JSONArray basedata = jsonObject.getJSONArray("basedata");
        System.out.println(basedata);
        //解析basedata里面的数据
        for (int i = 0; i <basedata.size(); i++) {
            demo demo = new demo();

            JSONObject jsonObject1 = basedata.getJSONObject(i);
            System.out.println(jsonObject1);
            //获取X值
            String x = jsonObject1.getString("X");
            demo.setXDis(Integer.valueOf(x.toString()));
            System.out.println(x);
            //获取Y值
            String y = jsonObject1.getString("Y");
            demo.setYDis(Integer.valueOf(y.toString()));
            //获取Z值
            String z = jsonObject1.getString("Z");
            demo.setHDis(Integer.valueOf(z.toString()));

            //将数据插入数据库
            demoMapper.insert(demo);


            String createDate = jsonObject1.getString("createDate");
            System.out.println(createDate);

        }

//        String code = jsonObject.getString("code");
//        System.out.println(code);
//        String deviceName = jsonObject.getString("deviceName");
//        System.out.println(deviceName);


//        List<Map<String, String>> resultList = (List<Map<String, String>>) jsonObject.get("Result");
//        for (Map<String, String> obj : resultList) {
//            System.out.println(obj);
//
//            //在这里把你获取到的数据封装到你需要的实体类中,调用你需要的方法即可存入数据库
//            //......
//        }
        return jsonObject;
    }

关键代码

在这里插入图片描述

测试数据库发现已经存入了

在这里插入图片描述
如果要加定时任务参考我的这篇博客
springboot工程如何设置定时任务详解(@Scheduled)以及cron表达式

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 点击跳转浏览

结语

🔥一个人可以掌握知识,但只有与他人交流才能形成智慧。
🔥One person can acquire knowledge, but wisdom is formed only in the exchange with others.
📝 欢迎大家关注博主公众号 Rockey小何同学 添加博主微信:he18339193956进群,一起学习,一起成长,一起提高认知。
🏆 我坚信人与人之间的差距是表面上是财富的差距,本质上是大脑中认知的差距,

我们下期再见。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间不会赖着不走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值