【已解决】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;。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

【已解决】JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;,Java,Exception,json,java,开发语言,spring boot,数据库,spring,maven

 发现我接收的格式为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、使用中间转换类接收

【已解决】JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;,Java,Exception,json,java,开发语言,spring boot,数据库,spring,maven

 

@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://www.toymoban.com/news/detail-722870.html

到了这里,关于【已解决】JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token;的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包