在使用axios向SpringBoot后端传参时遇到的一个问题
问题
报错如下:
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
)
]
}
原来后端的方法是:
把方法修改成下面这样就对了。请注意,两者的不同是就上面的List<SchoolVo> schools
改为了Map<String, List<SchoolVo>>
上述内容如果有错误的,欢迎评论指正