使用gson解决java对象循环引用问题

特别说明:gson处理循环引用问题,不会影响java自己的序列化,只影响gson自身的,注意区分。java

1. java对象引用成环说明:json

    1.1 相互引用成环:jvm

class A{
   B b;
   
}

class B{
   A a;
}

     1.2 自引用成环:工具

class A{
   A a;
}

2. 引用成环形成的问题:ui

      在java中,对象引用成环问题,能够被jvm自动处理,可是将java对象转成json格式时,因为转换工具不能自行切断环,会致使无限解析最终会致使栈溢出错误。spa

3. 解决方法:code

     全部解决方法,基本原理都是将“环”切断。对象

     1)gson提供了很是简洁的处理方式,将全部要转换成json的变量都用@Expose注解标记;将出现环的地方,不作任何处理。it

      2)建立gson构造器:io

Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation()
            .create();// 获取Gson构造器,能够过滤掉不带注解的字段

      3)转换json:

gson.toJson(testOject);

       使用上面第一个相互引用成环的例子举例说明:

     3.1 阻断环路:

class A{
   @Expose
   B 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数据
相关文章
相关标签/搜索