我使用的是Gson 2.8.1。我有這個代碼當我試圖使用Gson的toJson方法時,如何確定標記爲瞬態的字段?
Object o = session.getSecurityContext();
Gson gson = new Gson();
String serialized = gson.toJson(o);
它導致這個堆棧溢出錯誤。
15:45:47,784 ERROR [io.undertow.request] (default task-58) UT005023: Exception handling request to /ebook/WEB-INF/views/registration/studentConfirm.jsp: java.lang.StackOverflowError
at sun.util.locale.provider.DateFormatSymbolsProviderImpl.getInstance(DateFormatSymbolsProviderImpl.java:85)
at java.text.DateFormatSymbols.getProviderInstance(DateFormatSymbols.java:359)
at java.text.DateFormatSymbols.getInstance(DateFormatSymbols.java:335)
at java.util.Calendar.getDisplayName(Calendar.java:2110)
at java.text.SimpleDateFormat.subFormat(SimpleDateFormat.java:1125)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:966)
at java.text.SimpleDateFormat.format(SimpleDateFormat.java:936)
at java.text.DateFormat.format(DateFormat.java:345)
at com.google.gson.internal.bind.DateTypeAdapter.write(DateTypeAdapter.java:83)
at com.google.gson.internal.bind.DateTypeAdapter.write(DateTypeAdapter.java:41)
at com.google.gson.internal.bind.TypeAdapters$26$1.write(TypeAdapters.java:586)
at com.google.gson.internal.bind.TypeAdapters$26$1.write(TypeAdapters.java:579)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:69)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:125)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:243)
at com.google.gson.Gson$FutureTypeAdapter.write(Gson.java:976)
每其他的答案,如果我標記導致此作爲循環引用「短暫的」,這理應走了,但我怎麼計算出來的程序?我查看了所討論的對象,並且通過代碼檢查循環引用是什麼對我來說並不明顯。
也許是因爲我是GSON的新手,但我不會根據您的答案找出哪些字段是暫時的。 「試錯」是我一直在做的事情,它並沒有真正引導我到任何地方。 – Dave
如果字段無法序列化,則該字段必須是暫時的。通常,這比具有少量數據值的簡單對象(例如安全上下文的示例)更復雜。 – jwir3