json重复引用{“$ref:”$[0]}

问题场景

给前端返回候选城市列表时结果中出现这样的数据{“ref:”ref:”ref:”[0]}。候选信息是从城市list中获取,然后放到返回集合中。

 

问题原因

看到结果中的 $ref 大概能猜到是因为从一个list集合中抓数据导致的,重复的数据指向同一个引用。
确实没有遇到过这种问题,只能求网上的大神们。问题的根源是fastjson默认开启引用检测机制,将相同对象写成引用的形式。
但怎么解决呢?

 

解决方案

有几种答案,我汇总一下。

  1. 单个关闭引用检测
JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);


2.全局配置关闭引用检测

JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();


3.创建新对象
引用检测只会将相同对象转化为引用形式,那么新创建一个对象就不会被检测到。但这种方式有点low,不建议使用
4.不参与序列化
该方法不会将注解修饰的字段序列化,即不会放到json中,可以解决循环引用的问题。

@JSONField(serialize=false)

5.注解禁用引用检测
直接加在对象属性上即可,非常方便

@JSONField(serialzeFeatures=SerializerFeature.DisableCircularReferenceDetect)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值