【发布时间】:2017-11-29 19:24:17
【问题描述】:
我使用的是 Gson 2.8.1。我有这个代码
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)
根据其他答案,如果我将导致此问题的循环引用标记为“瞬态”,这应该会消失,但我如何以编程方式解决这个问题?我已经查看了有问题的对象,通过代码检查循环引用是什么对我来说并不明显。
【问题讨论】:
标签: java json serialization gson transient