java - 如何配置 Jackson 以首先序列化基类?
问题描述
我有一些存在于层次结构中的 JSON 模式:A 扩展 B 扩展 C。我使用jsonschema2pojo从这些模式生成 Java 类,它们被生成到匹配的类层次结构中。
由于我生成类的方式,我无法精细控制哪些注释可以应用于哪些字段(即@JsonPropertyOrder
)
当我与杰克逊连载时,我得到类似
{
"propertyOfA": "razz",
"propertyOfA": "jazz",
"propertyOfA": "baz",
"propertyOfB": "bar",
"propertyOfC": "foo"
}
这是正确的,因为属性顺序在 JSON 中没有意义。但是,我的实际消息很长 - 数千个字符 - 在浏览日志时,如果更通用的属性(来自基本模式,模式 C 的那些),其中只有少数,首先出现会更方便在消息中。
模式/类中的单个属性顺序并没有给我带来太多困扰,但如果我能让杰克逊先下降层次结构然后回溯,那就太好了。
{
"propertyOfC": "foo",
"propertyOfB": "bar",
"propertyOfA": "razz",
"propertyOfA": "jazz",
"propertyOfA": "baz"
}
我检查了所有的Feature
s 和MapperFeature
s,我发现唯一影响顺序的是SORT_PROPERTIES_ALPHABETICALLY
.
我还能在ObjectMapper
级别上做些什么,或者在不改变班级的情况下影响这个顺序吗?
解决方案
您可以在其(生成的)源文件之外的类上应用mixin注释。例如
在一个新文件上,定义一个接口:
@JsonPropertyOrder({"propertyOfC", "propertyOfB"})
public interface MixinA {
}
并将其注册到您的ObjectMapper
:
objectMapper.addMixIn(A.class, MixinA.class);
此顺序注释中列出的属性首先出现,因此您可以跳过 A 的属性。
推荐阅读
- python - 如何使用列表检查海龟是否在邮票附近
- dojo - IBM BPM Table 复选框只需将鼠标指针悬停在它们上方即可进行检查
- html - 如何在烧瓶 wtforms 多选中显示更多选项?
- python-3.x - 如何让 Python 类使用关键字和值获取可变数量的参数
- python - SeatGeek 刮擦证书问题
- python - 使用 sudo 时 Python conda env 不包含本地包
- visual-studio - “激活 TC 设置”有什么作用?
- ckeditor - CkEditor - 从 MsWord 文件中复制文本和图像并粘贴到编辑器文本框中不起作用
- python - 运行函数后如何设置链表的新头?
- python - 如何检测和突出显示单个代码文件中的相似行?