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

直接先上问题吧:

我定义了一个接口,数据以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的问题,但是浏览器是会出现的

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值