• fastjson中$ref循环引用


    问题描述:

       当我们使用fastjson工具包的方法转换成字符串时,我们发现转换后的字符串不正确,出现了$ref,如图

    为啥会出现$ref:

       这是因为我们对象出现了重复引用,待转换的对象有不同内部变量指向了同一个对象。

    public class User {
        private String userName;
    
        public User(String userName) {
            this.userName = userName;
        }
        // get与set方法省略
    }
    
    public class Order {
        private User userA;
        private User userB;
    
        public Order(User userA, User userB) {
            super();
            this.userA = userA;
            this.userB = userB;
        }
        // get与set方法省略
    }

       JSON字符串输出:

    public class FastJsonTest {
        public static void main(String[] args) {
            User user = new User("张三");
            Order order1 = new Order(user, user);
            System.out.println(JSON.toJSONString(order1));
        }
    }

       输出:

    {"userA":{"userName":"张三"},"userB":{"$ref":"$.userA"}}

    解决方式:

       我们可以加上序列化参数:SerializerFeature.DisableCircularReferenceDetect

    public class FastJsonTest {
        public static void main(String[] args) {
            User user = new User("张三");
            Order order1 = new Order(user, user);
            System.out.println(JSON.toJSONString(order1, SerializerFeature.DisableCircularReferenceDetect));
        }
    }

       输出:

    {"userA":{"userName":"张三"},"userB":{"userName":"张三"}}

    思考:

       如果出现了$ref一定我们对象构造上问题,我们更应该规范我们开发

  • 相关阅读:
    查詢一個表中的所有字段,一个表的结构
    二月份工作總結
    导出excel [原创]
    一个it老总对于新人的一点建议
    命名空间的别名
    mssql 格式化时间 [转]
    开发人员一定要加入收藏夹的网站
    sql 导出/入Excel
    hibernate中hbm文件中inverse功能
    详细展示Asp.net页面的生命周期[转]
  • 原文地址:https://www.cnblogs.com/zhi-leaf/p/14254472.html
Copyright © 2020-2023  润新知