java - 如何序列化子类型,就好像它是杰克逊的超级类型
问题描述
所以我正在尝试使用杰克逊来序列化我的会话,并且我正在使用 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 类型。
解决方案
感谢您的意见。
所以我没有意识到的是,在使用 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
这就是我要找的。
推荐阅读
- python - FCGI htaccess 处理程序:找不到命令
- python - 在文本框中搜索 str 的模块接受任何匹配
- document - 从下一个文档中获取文档字段
- regex - 如何匹配第一个字母或数字后的所有制表符?
- amazon-web-services - 如何将 lambda 函数的结果添加到阶跃函数的特定步骤
- php - 需要创建一个算法/函数来检查宵禁是否有效,可以跨越不同的日子
- angular - 如何在 Nginx 服务器上强制刷新旧版本的 Angular 应用程序?
- elasticsearch - ElasticSearch 中 Bool MUST 的粗略底层实现是什么?
- sqlite - 有没有办法让 JSON_VALUE 与 Microsoft.EntityFrameworkCore.Sqlite 一起工作?
- python - 如何使用 tweepy 3.10.0 回复计数和报价计数?