首页 > 解决方案 > 如何序列化子类型,就好像它是杰克逊的超级类型

问题描述

所以我正在尝试使用杰克逊来序列化我的会话,并且我正在使用 jpa 和 gauva。

我看到如下错误:

Could not read JSON: The class with org.apache.openjpa.util.java$util$Date$proxy and name of org.apache.openjpa.util.java$util$Date$proxy is not whitelisted

所以换句话说,被序列化的日期类型是子类型。

现在我想做的是将数据类型序列化为 Date 类型而不是特定类型,以便我可以简化序列化,特别是简化反序列化。

我希望有一种方法可以简单地添加映射,即如果您找到 X 类型然后将其序列化为 Y 类型。

标签: javajacksonjackson2

解决方案


感谢您的意见。

所以我没有意识到的是,在使用 mixin 自定义序列化时,您需要在声明的类型上而不是在实际类型上添加 mixin。我需要覆盖默认配置,因为默认配置包含类型 (org.apache.openjpa.util.java$util$Date$proxy),并且我为这种类型添加了一个 mixin。但我真正需要做的是为 java.util.Date 添加一个混合,因为这是声明的类型。

所以现在通过添加mixin:

@JsonTypeInfo(use = Id.NONE)
public static class DateMixin {

}

通过做

context.setMixInAnnotations(Date.class, DateMixin.class);

并不是:

context.setMixInAnnotations(org.apache.openjpa.util.java$util$Date$proxy.class, DateMixin.class);

我得到了我的预期行为。

它将我的日期序列化为

"日期":["org.apache.openjpa.util.java$util$Date$proxy",1571822501152]}

现在添加了mixin,我得到了:

“日期”:1571822501152

这就是我要找的。


推荐阅读