Spring Framework中保存JSON数组

icomxhvb  于 2023-11-16  发布在  Spring
关注(0)|答案(1)|浏览(154)

在我的项目中,我使用spring框架和一个数据库来使用esp8266记录指标。因为测量频率太高(~100毫秒),我决定将JSON数据作为数组发送。像这样:

[
    {
        "voltage":1111,
        "amperage":1111
    },
    {
        "voltage":2222,
        "amperage":2222
    } 
]

字符串
当试图发送数据时,控制器无法处理数据。并发出这样的错误:

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `com.INA219.INA219.models.DataModel` from Array value (token `JsonToken.START_ARRAY`)]


据我所知,我需要将json数组的每个元素保存保存为一个单独的对象,我该怎么做呢?
控制器方法

@PostMapping("/addData")
    public ResponseEntity addData(@RequestBody DataModel dataModell){
        try {
            dataServicez.saveData(dataModell);
            return ResponseEntity.ok("Ok");
        } catch (Exception e){
            return ResponseEntity.badRequest().body("Ошибка");
        }


服务方法

public DataModel saveData(DataModel dataModel){
        DataModel _dataModel = new DataModel(dataModel.getId(),dataModel.getAmperage(),dataModel.getVoltage());
        return dataRepo.save(_dataModel);
    }


数据模型类的一部分(类中的所有其他方法都是自动生成的getter和setter,以及默认构造函数)

public class DataModel {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;
    @Column(name = "amperage")
    private Double amperage;
    @Column(name = "voltage")
    private Double voltage;
...

vdgimpew

vdgimpew1#

您当前的实现在请求主体中期望单个对象,但您正在发送一个对象数组。要处理JSON对象数组,您需要更改方法签名以接受List而不是单个DataModel。以下是如何做到这一点:

@PostMapping("/addData")
public ResponseEntity addData(@RequestBody List<DataModel> dataModels){
    try {
        dataServicez.saveData(dataModels);
        return ResponseEntity.ok("Ok");
    } catch (Exception e){
        return ResponseEntity.badRequest().body("Ошибка");
    }
}

字符串
服务内容:

public List<DataModel> saveData(List<DataModel> dataModels){
    List<DataModel> savedDataModels = new ArrayList<>();
    for (DataModel dataModel : dataModels) {
        DataModel _dataModel = new DataModel(dataModel.getId(), dataModel.getAmperage(), dataModel.getVoltage());
        savedDataModels.add(dataRepo.save(_dataModel));
    }
    return savedDataModels;
}

相关问题