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一定我们对象构造上问题,我们更应该规范我们开发

  • 相关阅读:
    STL——pair
    STL——stack
    Python学习之编程基础
    开学第一课,课课有总结
    DNS域名解析
    FTP文件传输服务
    DHCP原理及配置
    Linux中配置网卡
    indoe与block解析
    Linux系统安全管理
  • 原文地址:https://www.cnblogs.com/zhi-leaf/p/14254472.html
Copyright © 2011-2022 走看看