当前位置:   article > 正文

【已解决】JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;

json parse error: cannot deserialize instance of `java.lang.string` out of s

前后端联调,JSON转换问题

JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;

【已解决】JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; 

上述问题为:前后端联调,类型转换不一致问题  不能将数组等转换为String类型

在我进行前后端联调的时候,发现前端传过来的JSON数据为:

  1. {
  2. "customAttributeItems": [
  3. {
  4. "text": "wq"
  5. }
  6. ],
  7. "name": "eq",
  8. "brandIds": [
  9. {
  10. "id": 3,
  11. "text": "三星"
  12. },
  13. {
  14. "id": 4,
  15. "text": "小米"
  16. }
  17. ],
  18. "specIds": [
  19. {
  20. "id": 28,
  21. "text": "手机屏幕尺寸"
  22. }
  23. ]
  24. }

上述这种格式为复杂JSON格式,并且左边的值对应的是一个数组,而数组中有对象,然而我在传输到后台接收的格式为String类型,也就是为下边:

 发现我接收的格式为String类型,找到了错误原因!

解决

又因为我前端引入的是外部JS文件实现的传输的JSON数据,所以不能将前端的JSON数据转换为字符串,因此,可以使用后端中间类来完成数据的转换

1、引入json转换工具

  1. <groupId>com.alibaba</groupId>
  2. <artifactId>fastjson</artifactId>
  3. <version>1.2.28</version>

 2、创建对应的转换类

  1. public class TypeTemplateAddReq {
  2. private Long id;
  3. /**
  4. * 模板名称
  5. */
  6. private String name;
  7. /**
  8. * 关联规格
  9. */
  10. private JSONArray specIds;
  11. /**
  12. * 关联品牌
  13. */
  14. private JSONArray brandIds;
  15. /**
  16. * 自定义属性
  17. */
  18. private JSONArray customAttributeItems;
  19. //get set方法省略,自己生成
  20. }

3、使用中间转换类接收

 

  1. @RequestMapping("/add")
  2. public String add( @RequestBody TypeTemplateAddReq req){
  3. //创建数据库映射的实体类
  4. TypeTemplate typeTemplate = new TypeTemplate();
  5. //将中间类的数据拷贝到 数据库映射的实体类中
  6. //这种拷贝是将id name那些类型对应上的数据拷贝进来
  7. BeanUtils.copyProperties(req,typeTemplate);
  8. //将中间类接受到的JSON数据,转换为String,并手动设置到数据库映射的实体类中
  9. typeTemplate.setCustomAttributeItems(req.getCustomAttributeItems().toJSONString());
  10. typeTemplate.setBrandIds(req.getBrandIds().toJSONString());
  11. typeTemplate.setSpecIds(req.getSpecIds().toJSONString());
  12. //测试数据
  13. // System.out.println(typeTemplate);
  14. // String jsonString = JSON.toJSONString(typeTemplate);
  15. // System.out.println(jsonString);
  16. //进行service、DAO层等操作
  17. boolean s= typeTemplateService.add(typeTemplate);
  18. //返回值根据自己的业务来返回
  19. return null;
  20. }

上述就是可以通过中间类来完成JSON数据之间的转换了

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/305354
推荐阅读
相关标签
  

闽ICP备14008679号