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一定我们对象构造上问题,我们更应该规范我们开发
分类:
Java开发相关问题集锦
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)