java使用FastJson封装数据出现$ref解决
fastjson
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
项目地址:https://gitcode.com/gh_mirrors/fastj/fastjson
免费下载资源
·
直接先上问题吧:
我定义了一个接口,数据以Json格式返回,我往Json对象填充的List对象集合在输出的数据中大量展示成 $ref
然后就网上查找以及找FastJson的官方说明书知道的问题出现的原因
原因——我的理解
是FastJson在对集合对象进行添加的时候,对于引用重复的某一快内存地址,默认开启了Fastjson 循环引用。
说白了,就是你的集合对象中,有一部分对象的属性。其值是一样的,比如我的List中有多个UserVo对象都有一个相同的String类型的deptName值,那么FastJson对于这部分相同的引用地址直接展示出引用了,而不是展示其值。
解决
知道了问题,就好解决了,别管别人怎么说,直接看官网文档的给的解决办法最踏实、最保险。
官方提供了两个办法:一个全局,一个局部
那我们直接在我们代码中操作方法即可:
先搞全局的 ——方法1
,直接在项目创建一个FastJson的配置类,全局关闭FastJson的循环引用
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.springframework.context.annotation.Configuration;
/**
*@Description 配置FastJson
*@Author
*@Date 2020/11/9
*@Version 1.0
*/
@Configuration
public class FastJsonConfig {
static {
//全局配置关闭 Fastjson 循环引用
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();
}
}
再试一下局部的——方法二
//直接在 list对象填充到json对象之前定义这行就行了
JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
jsonObject.put("code",200);
jsonObject.put("isSuccess",true);
jsonObject.put("data",list);
结果:
我分别试了上面的两种,多次测试,发现局部的有时候不管用,我没找到原因
全局的测试每次都OK
推荐使用全局的
另外,发现用postman测试接口的时候 ,不会出现$ref的问题,但是浏览器是会出现的
GitHub 加速计划 / fastj / fastjson
3
1
下载
FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
最近提交(Master分支:5 个月前 )
c942c834 - 1 年前
5bc4709b - 1 年前
更多推荐
已为社区贡献4条内容
所有评论(0)