为了账号安全,请及时绑定邮箱和手机立即绑定

我如何配置 Jackson 以首先序列化基类?

我如何配置 Jackson 以首先序列化基类?

MYYA 2023-06-14 15:59:39
我有一些存在于层次结构中的 JSON 模式:A extends B extends C。我正在使用jsonschema2pojo从这些中生成 Java 类,并将它们生成到匹配的类层次结构中。由于我生成类的方式,我无法细粒度地控制哪些注释可以应用于哪些字段(即@JsonPropertyOrder)当我连载 Jackson 时,我得到类似的东西{    "propertyOfA": "razz",    "propertyOfA": "jazz",    "propertyOfA": "baz",    "propertyOfB": "bar",    "propertyOfC": "foo"}这是正确的,因为属性顺序在 JSON 中没有意义。然而,我的实际消息非常长——数千个字符——在浏览日志时,如果更通用的属性(来自基本模式、模式 C 的属性)(只有少数几个)首先出现,会更方便在消息中。架构/类中的各个属性顺序并没有让我很困扰,但如果我能让 Jackson 先降低层次结构然后回溯,那就太好了。{    "propertyOfC": "foo",    "propertyOfB": "bar",    "propertyOfA": "razz",    "propertyOfA": "jazz",    "propertyOfA": "baz"}我检查了所有的Features 和MapperFeatures,我发现唯一影响顺序的是SORT_PROPERTIES_ALPHABETICALLY.ObjectMapper在-level 上,或者在不改变类的情况下,我还能做些什么来影响这个顺序?
查看完整描述

1 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

您可以在其(生成的)源文件之外的类上应用mixin注释。例如

在一个新文件上,定义一个接口:

@JsonPropertyOrder({"propertyOfC", "propertyOfB"})
    public interface MixinA {
}

并在您的注册ObjectMapper

objectMapper.addMixIn(A.class, MixinA.class);

此顺序注释中列出的属性排在第一位,因此您可以跳过 A 的属性。


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信