SpringBoot 通过Fastjosn处理接口数据后返回数据含有$ref

118 阅读1分钟

前言

最近在对系统做整体数据处理,在数据处理后统一使用com.alibaba.fastjson的将对象转换为json字符串,处理后的数据在返回给前端后出现了$ref,如下:

{  
    "items":[  
        {  
            "$ref":"$.widgetData.seriser[0].RowDimension[0]"  
        },
        {
           ...
        }
    ]  
}

原因分析

使用com.alibaba.fastjson时,具有相同引用的对象会变成类似于 "ref":".list[0]"的数据,导致前端解析出现错误。因为FastJson支持循环引用并默认缺省打开。

解决方案

查看FastJson中文手册,处理方案有两种:

  • 全局配置关闭
JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.DisableCircularReferenceDetect.getMask();
  • 非全局关闭
JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect);