私は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