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

我有一些存在于层次结构中的 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 上,或者在不改变类的情况下,我还能做些什么来影响这个顺序?


MYYA
浏览 98回答 1
1回答

慕无忌1623718

您可以在其(生成的)源文件之外的类上应用mixin注释。例如在一个新文件上,定义一个接口:@JsonPropertyOrder({"propertyOfC", "propertyOfB"})     public interface MixinA { }并在您的注册ObjectMapper:objectMapper.addMixIn(A.class, MixinA.class);此顺序注释中列出的属性排在第一位,因此您可以跳过 A 的属性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java