java使用FastJson封装数据出现$ref解决

直接先上问题吧:

我定义了一个接口,数据以Json格式返回,我往Json对象填充的List对象集合在输出的数据中大量展示成 $ref
java使用FastJson封装数据出现$ref解决_第1张图片
在这里插入图片描述
java使用FastJson封装数据出现$ref解决_第2张图片

在这里插入图片描述

然后就网上查找以及找FastJson的官方说明书知道的问题出现的原因

原因——我的理解

是FastJson在对集合对象进行添加的时候,对于引用重复的某一快内存地址,默认开启了Fastjson 循环引用。

说白了,就是你的集合对象中,有一部分对象的属性。其值是一样的,比如我的List中有多个UserVo对象都有一个相同的String类型的deptName值,那么FastJson对于这部分相同的引用地址直接展示出引用了,而不是展示其值。

解决

知道了问题,就好解决了,别管别人怎么说,直接看官网文档的给的解决办法最踏实、最保险。

官方提供了两个办法:一个全局,一个局部
java使用FastJson封装数据出现$ref解决_第3张图片

那我们直接在我们代码中操作方法即可:

先搞全局的 ——方法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的问题,但是浏览器是会出现的

你可能感兴趣的:(java开发,fastjson)