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