铁马冰河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 2022-08-15 22:19  铁马冰河2000  阅读(1536)  评论(0编辑  收藏  举报