出现$ref的原因及解决方案
$ref的产生原因
(1)重复引用:一个集合/对象中的多个元素/属性都引用了同一个对象
(2)循环引用:集合/对象中的多个元素/属性在相互引用导致循环
针对fastjson的处理
fastjson作为一款序列化引擎,不可避免的会遇到循环引用的问题,为了避免StackOverflowError异常,fastjson会对引用进行检测
局部解决法:
JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
全局解决法:
spring项目:
<mvc:annotation-driven> <mvc:message-converters register-defaults="true"> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"> <property name="supportedMediaTypes"> <array> <value>text/html;charset=UTF-8</value> </array> </property> <property name="features"> <array> <value>WriteMapNullValue</value> <value>WriteNullStringAsEmpty</value> <!-- 全局关闭循环引用检查,最好是不要关闭,不然有可能会StackOverflowException --><value>DisableCircularReferenceDetect</value></array> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
springboot项目:
public class FastJsonHttpMessageConverterEx extends FastJsonHttpMessageConverter{public FastJsonHttpMessageConverterEx(){//在这里配置fastjson特性(全局设置的)FastJsonConfig fastJsonConfig = new FastJsonConfig();//fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); //自定义时间格式//fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue); //正常转换null值//fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect); //关闭循环引用this.setFastJsonConfig(fastJsonConfig);}@Overrideprotected boolean supports(Class<?> clazz) {return super.supports(clazz);} }@Configuration public class WebMvcConfigurer extends WebMvcConfigurerAdapter {.....@Beanpublic FastJsonHttpMessageConverterEx fastJsonHttpMessageConverterEx(){return new FastJsonHttpMessageConverterEx();} }
注意事项:
FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致StackOverflowError异常。
针对于mybatis,自身默认开启一级缓存,在session范围内,参数相同的sql查询会查出同一对象,容易引发此问题
创建新的对象,把要有重复需要的对象的属性复制给新对象,新对象再添加到json那里。
转载于:https://www.cnblogs.com/it-taosir/p/10319388.html
出现$ref的原因及解决方案相关推荐
- 我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案...
几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) ),在文章中我提供了一个如 ...
- 以ajax请求方式进行文件下载操作失败的原因及解决方案
以ajax请求方式进行文件下载操作失败的原因及解决方案 参考文章: (1)以ajax请求方式进行文件下载操作失败的原因及解决方案 (2)https://www.cnblogs.com/sjshare/ ...
- 自动化测试(二) 单元测试junit的Test注解突然不能使用原因以及解决方案
自动化测试(二) 单元测试junit的Test注解突然不能使用原因以及解决方案 参考文章: (1)自动化测试(二) 单元测试junit的Test注解突然不能使用原因以及解决方案 (2)https:// ...
- IOS上传图片旋转90度问题出现原因及解决方案
IOS上传图片旋转90度问题出现原因及解决方案 参考文章: (1)IOS上传图片旋转90度问题出现原因及解决方案 (2)https://www.cnblogs.com/justdoityangbo/p ...
- Curl 采集乱码 gzip 原因及解决方案 utf-8
Curl 采集乱码 gzip 原因及解决方案 utf-8 参考文章: (1)Curl 采集乱码 gzip 原因及解决方案 utf-8 (2)https://www.cnblogs.com/jiaosq ...
- 数据倾斜的原因和解决方案
数据倾斜的原因和解决方案 参考文章: (1)数据倾斜的原因和解决方案 (2)https://www.cnblogs.com/pengpenghuhu/p/12000199.html 备忘一下.
- 内存溢出和内存泄漏的区别、产生原因以及解决方案
内存溢出和内存泄漏的区别.产生原因以及解决方案 参考文章: (1)内存溢出和内存泄漏的区别.产生原因以及解决方案 (2)https://www.cnblogs.com/ziyoublog/p/1038 ...
- ORA-12519, ORA-00020异常产生原因及解决方案
ORA-12519, ORA-00020异常产生原因及解决方案 参考文章: (1)ORA-12519, ORA-00020异常产生原因及解决方案 (2)https://www.cnblogs.com/ ...
- 新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死——原因与解决方案
新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死--原因与解决方案 参考文章: (1)新装 Win7 系统装完驱动精灵,一打开到检测界面就卡死--原因与解决方案 (2)https://www. ...
最新文章
- golang 警告提示 Error string should not be capitalized or end with punctuation mark
- jvm十一:类加载器双亲委托机制
- Direct2D (35) : 通过 DirectWrite 获取字体列表
- 开源开放 | 中国近代历史人物知识图谱
- 命令历史及快捷键介绍
- oracle 客户端连接数_查看oracle数据库允许的最大连接数和当前连接数
- vlc linux静态版本,vlc 在ubuntu 14下的linux版本编译
- ai人工智能 工业运用_人工智能在老年人健康中的应用
- 天涯怎么引流到qq?天涯社区如何靠发帖子引流?
- 如何自动化入侵海康设备
- vue鼠标上下滚动放大与缩小
- LibreOffice 宏
- 物体识别基本原理及其Python实现
- 根据贷款还款方式(等额本金,等额本息,等本等息,先息后本),计算本息
- windows创建文件硬连接
- 老树发新芽-前后端分离实践
- Configuring incomplete, errors occurred!
- 学mtml还是html5,图解核苷酸替代模型的选择 – MrMTgui 篇
- HP ALM使用简介
- windows7旗舰版主蓝色海洋 Windows7主题蓝色大海
热门文章
- 不相关子查询的工作方式是_课题组工作|Nucleic Acids Research|基于表达密度谱的特征子空间分离及相关单细胞转录组分群新算法...
- base64 二进制流java_读取和base64编码二进制文件
- 【音视频安卓开发 (三)】OpenGL ES 直接绘制YUV
- 抱歉咯!今天偷个懒!!
- CocosStudio的节点如何使用自定义shader
- 16进制数组转成10进制 qt_QT 十六进制字符串转化为十六进制编码
- php滚动到指定位置,JQuery插件:ScrollTo平滑滚动到页面指定位置
- java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...
- python程序设计题答案_《Python程序设计》习题与答案
- 西南医院微服务咋查得到_#全国最好医院排行榜#发布:成都这4家牛了!四川31个专科排全国前十(总榜)...