使用GSON对Hibernate DTO进行序列化时出错

时间:2012-11-30 13:23:33

标签: java json gson

尝试在我的JAVA代码中使用GSON将DTO序列化为JSON。 DTO扩展了一个抽象类,并实现了java.io.Serializable。 DTO作为其成员之一具有受保护的String [] [](2维数组)

发现以下错误,但到目前为止找不到合理的帮助。

SEVERE:Servlet 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:89)                 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write(ReflectiveTypeAdapterFactory.java:200)                 在com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)                 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write(ReflectiveTypeAdapterFactory.java:89)                 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write(ReflectiveTypeAdapterFactory.java:200)                 在com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68)                 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ 1.write(ReflectiveTypeAdapterFactory.java:89)                 在com.google.gson.internal.bind.ReflectiveTypeAdapterFactory $ Adapter.write(ReflectiveTypeAdapterFactory.java:200)                 在com.google.gson.Gson.toJson(Gson.java:546)                 在com.google.gson.Gson.toJson(Gson.java:525)                 在com.google.gson.Gson.toJson(Gson.java:480)                 在com.google.gson.Gson.toJson(Gson.java:460)

感谢您解释或解决任何帮助。

1 个答案:

答案 0 :(得分:0)

您应该注意,当您尝试序列化Hibernate DTO时,它可能与您最初声明的对象不同。 Hibernate将根据您的DTO编写一个Proxy类,但使用不同的字段来执行与持久性相关的操作。因此,如果您的DTO参与任何休眠操作,它将不是您的DTO而是代理。在尝试序列化之前,您应该在新的普通DTO中复制对象的内容。 你可以通过打印对象的getClass()方法输出来测试它,它将是一个代理对象而GSON不知道如何序列化一些代理字段。 希望这会有所帮助。