使用jackson序列化对象时如何覆盖类型信息?

时间:2013-06-14 12:44:15

标签: java hibernate jackson

我目前正在尝试序列化我之前通过Hibernate加载的数据。要恢复类型信息,我启用了默认类型:

objectMapper.enableDefaultTyping(DefaultTyping.NON_CONCRETE_AND_ARRAYS,As.PROPERTY);

我还通过此anotation向我的实体添加了身份信息:

@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, property = "@id")

然而,当我反序列化@OneToMany - 我的关系时,反序列化失败,因为PersistentBag此时没有会话。因为我的程序运行没有容器我无法轻松解决这个问题。

我也知道有一个事实,杰克逊有这个hibernate-datatype模块,但这并没有解决问题(我猜这个模块是用于尊​​重LAZY_LOADING-hibernate属性的primaliry)。

所以我想解决这个问题的方法是不要序列化PersistentBag而是序列化ArrayList。有没有一种简单的方法可以做到这一点,还是我必须编写自己的序列化程序(我试过但没有成功)?

1 个答案:

答案 0 :(得分:1)

我通过一个workaroung解决了这个问题,方法是将类型信息通过注释添加到我想要序列化的类中,并删除默认的输入行:

  

objectMapper.enableDefaultTyping(DefaultTyping.NON_CONCRETE_AND_ARRAYS,As.PROPERTY);