资讯专栏INFORMATION COLUMN

fastjson 重复引用和循环引用问题

zeyu / 2094人阅读

数据传输使用json格式再方便不过了。
fastjson 由阿里巴巴那伙人使用Java语言编写,号称最快的JSON库
前两天遇到一个问题 后台的数据转化为json字符串后发送到前台出现了$ref字样的东西,后来明白了这是引用,在传输的数据中出现相同的对象时,fastjson默认开启引用检测将相同的对象写成引用的形式.
说到引用分为两种,重复引用和循环引用

重复引用

指一个对象重复出现多次

循环引用

指你心里有我,我心里有你(互相引用),这个问题比较严重,如果处理不好就会出现StackOverflowError异常

重复引用的解决方法;
1.单个关闭 JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
2.全局配置关闭 JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();

循环引用的解决方法:
1.如果你前端用不到这个属性在该属性的get方法上加上注解@JSONField(serialize=false),
  这样该属性就不会被序列化出来,这个也可以解决重复引用
2.修改表结构,出现循环引用了就是一个很失败的结构了,不然准备迎接StackOverflowError异常。


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70937.html

相关文章

  • JPA 一对多双向映射 结果对象相互迭代 造成堆栈溢出问题方法

    摘要:问题在双向映射时,会相互包含对方的实例,相互引用,造成递归迭代,堆栈溢出。分析在后端向前端传递的时候会将数据序列化,转为,这时会出现循环引用造成堆栈溢出解决方案解决方法就是在转换时忽略循环字段。 问题: JPA 在双向映射时,会相互包含对方的实例,相互引用,造成递归迭代,堆栈溢出(java.lang.StackOverflowError)。 分析: 在后端向前端传递的时候会将数据序列化...

    diabloneo 评论0 收藏0
  • FastJson转换字符串引用相同对象产生的错误

    摘要:然后,断点看一下转换的内容,找到看到这里突然想起这个好像前面有遇到过,下面简单说下产生问题的原因这代表了是一种引用,它是在转换字符串的时候出现的,在引用了同一对象时出现。 问题产生 最开始问题是在C层的单元测试中产生的: showImg(https://segmentfault.com/img/bVbfUny?w=1322&h=278); 报错提示我们说:引用瞬态值,引用之前应该保存一...

    focusj 评论0 收藏0

发表评论

0条评论

zeyu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<