铁马冰河2000

导航

统计

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

posted on   铁马冰河2000  阅读(1586)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示