java - 使用 Gson 序列化一个 POJO

标签 java gson

我使用 GSON 序列化 POJO——更改前后的对象。

由 Struts2 设置的修改后的一个(称之为 A)可以很容易地序列化为 Json。

而修改之前通过iBatis(称之为B)从数据库中获取的POJO无法序列化。

错误消息说:忘记注册类型适配器?

我已经阅读了 Gson API。但是我不认为为每个 POJO 注册一个类型适配器是个好主意。是什么导致 B 无法序列化?

我为我的 POJO 写了一个 clone(),从 B 克隆的对象也可以完成。

这令人困惑...有人可以回答我吗?

更改前(B 的克隆):

{"id":"6429B5329C544711A9848AF243D10E4E","idType":"未选择","firstDate":"Feb 29, 2012 12:00:00 AM","name":"testetes","gender":"男","phone":"553223","city":"未选择","ocup":"未选择","nation":"未选择","famStru":"未选择","infSouc":"未选择","creater":"EE4783A6272A4B62A5CC68DB3C11FE1E","createDate":"Feb 29, 2012 12:00:00 AM","purpose":"未选择","education":"未选择","income":"未选择","cars":"未选择","acptCarpRent":"未选择","acptCarpPrice":"未选择","handStand":"未选择","intentHouse":"未选择","intentArea":"未选择","intentLayout":"未选择","nextDate":"Mar 7, 2012 12:00:00 AM","wuyeType":"未选择","attentionPro":"958B9E093A84415B901900C2DA25C712","ordinaryTraffic":"未选择","attentionPoint":"未选择","buyDate":"未选择","cityArea":"未选择","lastUpdate":"Feb 29, 2012 12:00:00 AM","lastModifier":"EE4783A6272A4B62A5CC68DB3C11FE1E","saler":"A4FB4877DC2945E980477544A955B57F","state":"意向","status":"0"}

修改后(A):

{"id":"6429B5329C544711A9848AF243D10E4E","idType":"未选择","firstDate":"Feb 29, 2012 12:00:00 AM","visitMode":"","name":"testetes","gender":"男","telPhone":"","phone":"553223","fax":"","adrs":"","postCode":"","email":"","workUnit":"","city":"未选择","media_id":"","ocup":"未选择","idNum":"","nation":"未选择","famStru":"未选择","infSouc":"未选择","createDate":"Feb 29, 2012 12:00:00 AM","idAdr":"","purpose":"未选择","education":"未选择","income":"未选择","cars":"未选择","acptCarpRent":"未选择","acptCarpPrice":"未选择","handStand":"未选择","intentHouse":"未选择","intentArea":"未选择","intentLayout":"未选择","customerDetail":"","wuyeType":"未选择","attentionPro":"958B9E093A84415B901900C2DA25C712","ordinaryTraffic":"未选择","attentionPoint":"未选择","buyDate":"未选择","cityArea":"未选择","lastUpdate":"Mar 11, 2012 2:58:04 PM","lastModifier":"00000000000000000000000000000000","saler":"A4FB4877DC2945E980477544A955B57F","state":"意向"}

最佳答案

听起来您的 POJO 是 Customer 类型?当你克隆你的对象时,你正在创建一个新的客户,Gson 可以很好地序列化它。但是,当您从数据库中获取相同的对象时,它不是标准的 Customer 对象。相反,它是一个包含一些持久性信息的子类,例如对象的类。

可能最简单的解决方案是使用 Gson 的 @Expose注解。如果您使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create() 创建 Gson 对象, 然后您可以标记每个要序列化的客户字段 @Expose .任何其他字段,包括持久性框架子类的字段,都不会被序列化。

关于java - 使用 Gson 序列化一个 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9660876/

相关文章:

java - Java 中的原始转换和赋值

java - GSON 如何决定它在反序列化过程中使用哪个 TypeAdapter?

没有参数的 java.lang.RuntimeException : Failed to invoke public com. example.syncapp.MessageBase()

java - 带有 GSON 的 JSON 数组引发错误 "Expected BEGIN_OBJECT but was STRING"

java - 如何使用 google gson 库解析下面给出的 json

java - 从 PriorityQueue 中删除具有相同优先级的元素

java - 在不改变宽高比的情况下将背景图像填充到屏幕

java - JsonArray 的项目没有 id

java - 覆盖包中的 Java 属性

java - 如何在Java中的表的列中添加复选框