使用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數據
相關文章
相關標籤/搜索