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)


 

猜你喜欢

转载自blog.csdn.net/qq_17059903/article/details/108060484