文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-22 14:00

关注

前后端联调,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类型,也就是为下边:

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

解决

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

1、引入json转换工具

   com.alibaba        fastjson        1.2.28

 2、创建对应的转换类

public class TypeTemplateAddReq {    private Long id;        private String name;        private JSONArray specIds;        private JSONArray brandIds;        private JSONArray customAttributeItems;//get set方法省略,自己生成}

3、使用中间转换类接收

 

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

来源地址:https://blog.csdn.net/wang20000102/article/details/132394882

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯