兜兜零元 发表于 2024-9-22 17:37:14

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

前后端联调,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数据为:
{
    "customAttributeItems": [
      {
            "text": "wq"
      }
    ],
    "name": "eq",
    "brandIds": [
      {
            "id": 3,
            "text": "三星"
      },
      {
            "id": 4,
            "text": "小米"
      }
    ],
    "specIds": [
      {
            "id": 28,
            "text": "手机屏幕尺寸"
      }
    ]
} 上述这种格式为复杂JSON格式,而且左边的值对应的是一个数组,而数组中有对象,然而我在传输到背景接收的格式为String类型,也就是为下边:
https://i-blog.csdnimg.cn/blog_migrate/b2aeb6e43239461febaeed6eb4be9219.png
 发现我接收的格式为String类型,找到了错误缘故原由!
解决

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

   <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.28</version>  2、创建对应的转换类

public class TypeTemplateAddReq {

    private Long id;



    /**
   * 模板名称
   */
    private String name;

    /**
   * 关联规格
   */
    private JSONArray specIds;

    /**
   * 关联品牌
   */
    private JSONArray brandIds;

    /**
   * 自定义属性
   */
    private JSONArray customAttributeItems;
//get set方法省略,自己生成
} 3、利用中间转换类接收

https://i-blog.csdnimg.cn/blog_migrate/873aba94bfe6b2cfbac86408ab505ce7.png
 
@RequestMapping("/add")
    public String add( @RequestBody TypeTemplateAddReq req){
      //创建数据库映射的实体类
      TypeTemplate typeTemplate = new TypeTemplate();

      //将中间类的数据拷贝到 数据库映射的实体类中
      //这种拷贝是将id name那些类型对应上的数据拷贝进来
      BeanUtils.copyProperties(req,typeTemplate);

      //将中间类接受到的JSON数据,转换为String,并手动设置到数据库映射的实体类中
         typeTemplate.setCustomAttributeItems(req.getCustomAttributeItems().toJSONString());
      typeTemplate.setBrandIds(req.getBrandIds().toJSONString());
      typeTemplate.setSpecIds(req.getSpecIds().toJSONString());
            //测试数据
//      System.out.println(typeTemplate);
//      String jsonString = JSON.toJSONString(typeTemplate);
//      System.out.println(jsonString);
            //进行service、DAO层等操作
      boolean s=typeTemplateService.add(typeTemplate);

         //返回值根据自己的业务来返回
      return null;
    } 上述就是可以通过中间类来完成JSON数据之间的转换了




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【已解决】JSON parse error: Cannot deserialize instance of `java.lang.