0

Java コードで GSON を使用して DTO を JSON にシリアル化しようとしています。DTO は抽象クラスを拡張し、java.io.Serializable も実装します。メンバーの 1 つとしての DTO には、保護された文字列 [][] (2 次元配列) があります。

次のエラーが発生し、これまでのところ判読可能なヘルプは見つかりませんでした。

SEVERE: サーブレット jsp の Servlet.service() が例外 java.lang.UnsupportedOperationException をスローしました: java.lang.Class: org.hibernate.proxy.HibernateProxy をシリアライズしようとしました。型アダプターを登録するのを忘れましたか? com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:62) で com.google.gson.internal.bind.TypeAdapters$1.write(TypeAdapters.java:59) で com.google.gson .internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) com.google.gson.internal.bind.ArrayTypeAdapter.write(ArrayTypeAdapter.java:93) com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write で(TypeAdapterRuntimeTypeWrapper.java:68) com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:

それを説明または解決するための助けをいただければ幸いです。

4

1 に答える 1

0

Hibernate DTOをシリアル化しようとすると、最初に宣言したものと同じオブジェクトになることはできないことに注意してください。Hibernateは、DTOに基づいてプロキシクラスを作成しますが、永続性関連の操作を行うためにさまざまなフィールドを使用します。したがって、DTOが休止状態の操作に参加する場合、それはDTOではなくプロキシになります。オブジェクトをシリアル化する前に、オブジェクトの内容を新しいプレーンDTOにコピーする必要があります。これは、オブジェクトgetClass()メソッドの出力を出力することでテストできます。これはプロキシオブジェクトになり、GSONは一部のプロキシフィールドをシリアル化する方法を知りません。お役に立てれば。

于 2012-11-30T13:35:41.193 に答える