[英]Spring Boot - Unable to De-serialize JSON Object Sent by Fetch
我正在尝试从前端 js 发送一个 JSON object 到 Spring Boot. 我在 Spring 引导中不断收到以下错误
解决了[org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type
com.c3.healthapp.model.HeartRateEntry
from Array value (tokenJsonToken.START_ARRAY
); 嵌套异常是 com.fasterxml.jackson.databind.exc.MismatchedInputException:无法反序列化类型com.c3.healthapp.model.HeartRateEntry
来自数组值(标记JsonToken.START_ARRAY
> [Source:org.spring ]<EOL util.StreamUtils$NonClosingInputStream); 行:1,列:1]]
以及客户端的状态 400。
用于发送的Javascript function是
function saveEntryToDB(entry){
fetch("/customer/heartrate/save", {
method: "POST",
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(entry)
}).then(res => {
console.log("User saved. response:", res);
});
}
object 正在发送
{
entryHeartRate: 55,
dateOfEntry: Tue Mar 01 2022 00:00:00 GMT+0000 (Greenwich Mean Time)
}
Spring 开机 controller 方法
@PostMapping("/heartrate/save")
public ResponseEntity<String> saveHeartRate(@RequestBody HeartRateEntry heartRateEntry) {
String username = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString();
Customer customer = customerService.getCustomer(username);
customer.getHeartRateEntries().add(heartRateEntry);
customerService.saveCustomer(customer);
URI uri = URI.create(ServletUriComponentsBuilder.fromCurrentContextPath().path("/heartrate/save").toUriString());
return ResponseEntity.created(uri).body("Saved!");
}
和 HeartRateEntry class
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class HeartRateEntry {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long entryId;
private int entryHeartRate;
private Date dateOfEntry;
@Override
public String toString() {
return "Entry Id: " + entryId + " Entry Heart Rate: " + entryHeartRate + " Date Of Entry : " + dateOfEntry;
}
}
到目前为止,我已经能够从 HTML forms 提交其他实体,并毫无问题地获取从 Spring 返回的值(包括心率条目数组)。
我尝试将日期格式化为 dd/mm/yy 并将注释 '@JsonFormat(pattern="dd/mm/yyyy")' 添加到 HeartRateEntry class 中的 dateOfEntry 属性,以防日期解析出现某种问题,但这似乎没有什么不同。
我还尝试在发送之前向 JSON object 添加一个 id 属性。 这似乎也没有什么区别。
我必须创建一个 null JS object 并在提交之前将值添加到其中。 我相信这与存储在创建的 object 中的 javascript object 原型有关。
let nullEntry = Object.create(null);
nullEntry.entryHeartRate = entry.entryHeartRate;
nullEntry.entryHeartRate = entry.dateOfEntry;
saveEntryToDB(nullEntry);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.