在我的项目中,我使用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;
...
型
1条答案
按热度按时间vdgimpew1#
您当前的实现在请求主体中期望单个对象,但您正在发送一个对象数组。要处理JSON对象数组,您需要更改方法签名以接受List而不是单个DataModel。以下是如何做到这一点:
字符串
服务内容:
型