ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在使用axios向SpringBoot后端传参时遇到的一个问题

2022-06-09 12:35:24  阅读:154  来源: 互联网

标签:axios SpringBoot OBJECT JSON value util test 参时 schools


问题

报错如下:

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;
}
  上述内容如果有错误的,欢迎评论指正

标签:axios,SpringBoot,OBJECT,JSON,value,util,test,参时,schools
来源: https://www.cnblogs.com/h-hb/p/16358861.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有