使用gson解决java对象循环引用问题
2019独角兽企业重金招聘Python工程师标准>>>
特别说明:gson处理循环引用问题,不会影响java本身的序列化,只影响gson自身的,注意区分。
1. java对象引用成环说明:
1.1 相互引用成环:
class A{B b;}class B{A a;
}
1.2 自引用成环:
class A{A a;
}
2. 引用成环造成的问题:
在java中,对象引用成环问题,可以被jvm自动处理,但是将java对象转成json格式时,由于转换工具不能自行切断环,会导致无限解析最终会导致栈溢出错误。
3. 解决方法:
所有解决方法,基本原理都是将“环”切断。
1)gson提供了非常简洁的处理方式,将所有要转换成json的变量都用@Expose注解标记;将出现环的地方,不做任何处理。
2)创建gson构造器:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();// 获取Gson构造器,可以过滤掉不带注解的字段
3)转换json:
gson.toJson(testOject);
使用上面第一个相互引用成环的例子举例说明:
3.1 阻断环路:
class A{@ExposeB b;}class B{A a;//不转换该字段,阻断循环引用
}
3.2 创建gson构造器,并转换json:
Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();// 获取Gson构造器,可以过滤掉不带注解的字段
A testObj = new A();
String json = gson.toJson(testObj);//获取json数据
转载于:https://my.oschina.net/airship/blog/792414
使用gson解决java对象循环引用问题相关推荐
- java json循环引用_填坑,解决json对象循环引用,在复杂案例中的应用
// 这是Kotlin代码,Java也是一样原理,都是用@JsonView实现单向透明.// 原理:使用@JsonView和withView(JvXxx) 让jackson从某一方向扫描时,直接忽略某 ...
- GSON将Java对象转成JSON时,如何排除某些字段
GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段. 最简单的用法 假设有下面这个类: 1 clas ...
- Java对象和引用变量
对于引用变量的深层含义,未必在初学的时候就能深刻理解, 所以理解好下面这两句话的真正含义非常重要 Case cc=new Case();Case cc; cc=new Case(); 1.先搞清楚什么 ...
- java gc 循环引用_JVM(3)对象A和B循环引用,最后会不会不被GC回收?-------关于Java的GC机制...
①首先说一下,GC里边在JVM其中是使用的ROOT算法,ROOT算法,什么称作为ROOT呢,就是说类的静态成员,静态成员就是static修饰的那种,是"根"的一个,根还包含方法中的 ...
- FastJson、Jackson、Gson进行Java对象转换Json的细节处理
前言 Java对象在转json的时候,如果对象里面有属性值为null的话,那么在json序列化的时候要不要序列出来呢?对比以下json转换方式 一.fastJson 1.fastJson在转换java ...
- gson转对象变成null_FastJson、Jackson、Gson进行Java对象转换Json的细节处理
转 https://blog.csdn.net/moneyshi/article/details/51830329 Java对象转换Json的细节处理 前言 Java对象在转json的时候,如果对象里 ...
- 使用Gson将Java对象转换为JSON
Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象. Gson里最重要的对象有2个Gson 和 GsonBuilder Gson有2个最基本的方 ...
- 堆栈关系java_从关键字说Java对象、引用、指针、堆栈的关系
前言:上一篇中我们介绍了new关键字 点击打开链接,new一个类,实际上就是调用该类的构造函数,返回该类的对象.如a = new Animal();返回的对象赋给变量a.我们来分析一下内存分配的步骤, ...
- iOS 解决CADisplayLink造成循环引用方案
最近在排查项目中存在的内存泄漏,今天和大家分享一个CADisplayLink造成循环引用的解决方案,造成内存循环引用的原因和NSTimer是一样的都是加入runloop后对target进行了一个强持有 ...
最新文章
- Cocos2d-x3.1颗粒使用
- 三:Bootstrap-js插件
- dhl: js判断网页对象是否存在
- 走近互联网先驱者——Henning Schulzrinne
- pt-online-schema-change 在线修改表结构
- Github|类别不平衡学习资源(上)
- 垃圾回收算法与实现系列-Java的Class文件详解
- shell脚本执行时报bad interpreter: Text file busy的解决方法
- python题目58:工厂流水线调度
- linux复制文件到另一台服务器
- 人人网登陆(selenium、PtantomJS结合)
- NVIDIA显卡怎么更新驱动
- 镜头MTF值的基本原理和解读
- response.text 与 response.content
- 分享Nexus桌面插件的安装及使用,超级好看、好用的插件。附下载链接。
- 拉普拉斯变换与闭环系统稳定探讨
- 基于SDN的访问控制模块实现
- 计算机考试函数应用题及答案,2016年全国职称计算机考试EXCEL考前练习题4
- oracle读取数据方式,关于oracle数据库读取数据的三种方式
- 「JavaSE」- 常用类