问题
报错如下:
Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `java.util.ArrayList<×××>` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `java.util.ArrayList<×××>` from Object value (token `JsonToken.START_OBJECT`)<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 1]]
翻译一下,大意是:JSON解析错误:无法从对象值(token JsonToken.START_OBJECT
)反序列化“java.util.ArrayList<×××>
”类型的值;嵌套异常为com.fasterxml.jackson.databind.exc.MismatchedInputException
:无法从对象值反序列化“java.util.ArrayList<×××>
”类型的值(token JsonToken.START_OBJECT
)<EOL>,位于[源:(org.springframework.util.StreamUtils$nonclosingputstream)
;第1行,第1列]
简单来说大概就是JSON字符串解析错误
解决方法
开门见山,我的这个问题是由于JSON的key-value没有和后端由@RequestBody所注解的变量类型一一对应所导致的。所以只要将它们对应起来,问题就解决了。
首先,前端axios的post请求为:
this.$axios.post(`/test`,
{
schools: this.tableData
}).then((response) => {
console.log(response)
})
axios传到后端的JSON字符串为:
{
schools : [
SchoolVo(
schoolId=1,
schoolName="测试",
schoolSpecialities=1,
schoolTeachers=3,
schoolCourses=15
),
SchoolVo(
schoolId=2,
schoolName="测试2",
choolSpecialities=0,
schoolTeachers=1,
schoolCourses=1
)
]
}
原来后端的方法是:
@PostMapping("/test")
public boolean test(@RequestBody List<SchoolVo> schools) {
// ...
return false;
}
把方法修改成下面这样就对了。请注意,两者的不同是就上面的List<SchoolVo> schools
改为了Map<String, List<SchoolVo>>
@PostMapping("/test")上述内容如果有错误的,欢迎评论指正
public boolean test(@RequestBody Map<String, List<SchoolVo>> abc) {
List<SchoolVo> schools = abc.get("schools");
// ...
return false;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。