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

Spring Framework中如何处理并保存ESP8266发送的JSON数组?

解决Spring接收JSON数组并批量保存ESP8266监测数据的问题

你遇到的错误原因很明确:发送的请求体是JSON数组,但Controller方法的@RequestBody参数声明为单个DataModel对象,Jackson无法将数组反序列化成单个对象,因此抛出HttpMessageNotReadableException。要实现将数组中每个元素作为独立对象保存,只需修改以下几处代码:

1. 修改Controller,接收List

将Controller的请求参数改为List<DataModel>,直接接收整个JSON数组:

@PostMapping("/addData")
public ResponseEntity addData(@RequestBody List<DataModel> dataModels){
    try {
        dataServicez.saveBatchData(dataModels);
        return ResponseEntity.ok("批量保存成功");
    } catch (Exception e){
        return ResponseEntity.badRequest().body("保存失败:" + e.getMessage());
    }
}

2. 新增批量保存的Service方法

利用JPA自带的批量保存方法saveAll(前提是你的dataRepo继承了JpaRepository),替代循环单个保存,提升效率:

public List<DataModel> saveBatchData(List<DataModel> dataModels){
    // ID是自增字段,无需手动赋值,直接传入列表即可
    return dataRepo.saveAll(dataModels);
}

注:如果你的业务需要对每个DataModel做额外处理,可以遍历列表逐个创建对象,但通常Jackson已经完成了JSON到对象的反序列化,直接保存即可。

3. 关键注意事项

  • 确保DataModel类存在无参构造方法,Jackson反序列化必须依赖它
  • ESP8266发送的整数值会被Jackson自动转换为Double类型,无需额外处理
  • 批量保存相比循环单个保存,能大幅降低数据库交互次数,更适合高频数据场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:23:13