fastjson中$ref迴圈引用
阿新 • • 發佈:2021-01-09
問題描述:
當我們使用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一定我們物件構造上問題,我們更應該規範我們開發