gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:16:36 24 4
gpt4 key购买 nike

我有一些存在于层次结构中的 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"
}

我检查了所有的 FeatureMapperFeature,我发现唯一影响顺序的是 SORT_PROPERTIES_ALPHABETICALLY .

ObjectMapper 级别,或者在不更改类的情况下,我还能做些什么来影响这个顺序吗?

最佳答案

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

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

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

并将其注册到您的 ObjectMapper:

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

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

关于java - 我如何配置 Jackson 以首先序列化基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57570734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com