You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot中如何将GET请求的响应体保存至SQL数据库

SpringBoot将GET请求响应存储到SQL数据库的实现方法

你提供的示例GET响应结构参考:

[
    {
        "id": 6,
        "dateTime": "2020-12-02 00:00:00",
        "msisdn": 771234,
        "chargedAmount": 250.0
    },
    {
        "id": 7,
        "dateTime": "2020-12-31 23:59:58",
        "msisdn": 771234568,
        "chargedAmount": 1000.0
    }
]

首先需要引入的基础依赖:

  • Spring Web:用于发送HTTP GET请求
  • 数据库操作框架:可选Spring Data JPA / MyBatis / MyBatis-Plus,用于SQL数据写入
  • 对应SQL数据库的驱动(比如MySQL Driver、PostgreSQL Driver)
  • Lombok(可选):简化实体类代码

步骤1:创建数据库表

对应响应字段,参考MySQL建表语句:

CREATE TABLE `charge_record` (
  `id` bigint NOT NULL PRIMARY KEY COMMENT '响应返回的唯一id',
  `date_time` datetime NOT NULL COMMENT '交易时间',
  `msisdn` bigint NOT NULL COMMENT '用户号码',
  `charged_amount` decimal(10,2) NOT NULL COMMENT '扣费金额'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

步骤2:编写映射实体类

以JPA为例,同时适配JSON响应字段和数据库表字段:

import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.persistence.*;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;

@Data
@Entity
@Table(name = "charge_record")
public class ChargeRecord {
    @Id
    private Long id;
    
    @JsonProperty("dateTime")
    @Column(name = "date_time")
    private Date dateTime;
    
    private Long msisdn;
    
    @JsonProperty("chargedAmount")
    @Column(name = "charged_amount")
    private BigDecimal chargedAmount;
}

如果使用MyBatis/MyBatis-Plus,对应调整注解即可。

步骤3:编写数据库操作接口

以Spring Data JPA为例:

import org.springframework.data.jpa.repository.JpaRepository;

public interface ChargeRecordRepository extends JpaRepository<ChargeRecord, Long> {
}

步骤4:实现请求调用+解析+存库逻辑

首先将RestTemplate注册到Spring容器:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

核心业务逻辑示例:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.Arrays;
import java.util.List;

@Service
public class ChargeRecordService {

    private final RestTemplate restTemplate;
    private final ChargeRecordRepository chargeRecordRepository;

    // 构造方法注入
    public ChargeRecordService(RestTemplate restTemplate, ChargeRecordRepository chargeRecordRepository) {
        this.restTemplate = restTemplate;
        this.chargeRecordRepository = chargeRecordRepository;
    }

    @Transactional(rollbackFor = Exception.class)
    public void syncAndSaveChargeRecords(String getRequestUrl) {
        // 发送GET请求,直接将响应解析为实体类数组
        ChargeRecord[] records = restTemplate.getForObject(getRequestUrl, ChargeRecord[].class);
        if (records == null || records.length == 0) {
            return;
        }
        List<ChargeRecord> recordList = Arrays.asList(records);
        // 批量插入数据库
        chargeRecordRepository.saveAll(recordList);
    }
}

额外优化点

  • 可提前对响应数据做合法性校验,避免非法数据入库
  • 响应中的id为唯一主键,重复插入时数据库会自动报错,可按需增加查询去重逻辑
  • 如果GET响应数据量很大,可分批拉取分批插入,避免内存溢出
  • 可添加请求重试机制,应对接口调用失败的场景

内容的提问来源于stack exchange,提问作者Nathindu Himansha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 16:42:00