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

  • 相关阅读:
    permute
    ind2sub
    randi( )函数--MATLAB
    ABAQUS复合材料
    matlab中fix函数,floor函数,ceil函数
    在windows10中卸载软件和取消开机启动程序
    在linux的tomcat中配置https及自动跳转
    解决ubuntu无法远程连接
    谷歌浏览器 插件安装配置Momentum chrome
    0903——元类
  • 原文地址:https://www.cnblogs.com/zhi-leaf/p/14254472.html
Copyright © 2011-2022 走看看