zoukankan      html  css  js  c++  java
  • 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一定我们对象构造上问题,我们更应该规范我们开发

  • 相关阅读:
    古代军队的官的从大到小的排序
    [转]DAO、RDO、ADO、OLE DB 、ODBC and JDB
    JSP页面之间参数传递中文出现乱码
    重置VS2008插件环境
    PB7中调用VC6的DLL
    Visual Studio统计有效代码行数
    php.ini 中文版
    IDEA Plugin JB* Components
    [转]你还在为怎么查看字节码指令而担忧吗?
    战地2, 2142解决Win10运行闪退问题
  • 原文地址:https://www.cnblogs.com/zhi-leaf/p/14254472.html
Copyright © 2011-2022 走看看