【已解决】JSON parse error: Cannot deserialize instance of `java.lang. ...

打印 上一主题 下一主题

主题 864|帖子 864|积分 2592

前后端联调,JSON转换问题

  1. 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数据之间的转换了




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表