MENU

使用Fastjson解析List对象时出现$ref: "$.list[0]"的问题

前言

最近用Spring boot写Api接口,其中引入了FastJson这个阿里巴巴的一个包,用于序列化接口,刚入门Java写接口,看帖子都说这个不错,so 我也尝试了用这个。但是遇到一个很奇怪的问题,list中重复的部分直接用的是引用。当时一脸懵逼。
62-1

解决方法

遇到问题,谷歌大法(程序员必备了)。
网上说出的原因是:循环引用造成对对象解析成引用。
循环引用,当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。
好吧,再看看官方GitHub中wiki确实还有这么一篇问题解决这个问题的。JSON Fastjson最佳实践

造成list出现引用对象的问题分析:

循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。引用是通过$ref标示的,下面介绍一些引用的描述
"$ref":".." 上一级
"$ref":"@" 当前对象,也就是自引用
"$ref":"$" 根对象
"$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)

so,总的来说,解决这个问题就是禁止循环引用方案咯

JSON.toJSONString(this,SerializerFeature.DisableCircularReferenceDetect)

本文参考:解决FastJson中“$ref 循环引用”的问题

标签: Java, Spring boot
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码