成都络迈品牌网站建设,网站建设的行业资讯、,个人网站 云服务器,公司微网站怎么做的最近在使用fastjson时候遇到一个问题#xff0c;后台的数据转化为json字符串后发送到前端时候出现了$ref字样的东西#xff0c;后来明白了这是引用#xff0c;下面详细介绍下。一、一个简单的例子先来上一段代码#xff0c;运行后打印的结果可能出乎意料#xff0c;代码如…最近在使用fastjson时候遇到一个问题后台的数据转化为json字符串后发送到前端时候出现了$ref字样的东西后来明白了这是引用下面详细介绍下。一、一个简单的例子先来上一段代码运行后打印的结果可能出乎意料代码如下org.junit.Test
public void testFastJson() {MapString, Object dataMap new HashMap();ListUser userList1 new ArrayList();ListUser userList2 new ArrayList();for (int i 0; i 2; i) {User user new User();user.setId(i);userList1.add(user);userList2.add(user);}dataMap.put(userList1, userList1);dataMap.put(userList2, userList2);System.out.println(JSON.toJSONString(dataMap));
}上面代码运行后打印结果如下{userList1:[{id:0},{id:1}],userList2:[{$ref:$.userList1[0]},{$ref:$.userList1[1]}]}从打印结果可以看到里面含有了$ref等字符为什么为这样呢这就是引用在传输的数据中出现相同的对象时fastjson默认开启引用检测将相同的对象写成引用的形式。二、引用的分类引用分为两类重复引用和循环引用重复引用 指一个对象重复出现多次循环引用 指你心里有我我心里有你(互相引用)这个问题比较严重如果处理不好就会出现StackOverflowError异常三、如何关闭引用有两种方式可以关闭fastjson的引用支持。关闭引用检测还能够提升序列化时的性能。全局配置关闭 JSON.DEFAULT_GENERATE_FEATURE | SerializerFeature.DisableCircularReferenceDetect.getMask();非全局关闭 JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);四、引用的语法FastJson序列化出现$ref的的解决方案介绍完成了有问题欢迎留言沟通哦