我有一个存在于层次结构中的JSON模式:A扩展B扩展C。我正在使用jsonschema2pojo从这些生成Java类,并将它们生成为匹配的类层次。
由于我生成类的方式,我无法对可以将哪些注释应用于哪些字段(即@JsonPropertyOrder)进行精细控制
当我与杰克逊连载时,我得到类似
{
"propertyOfA": "razz",
"propertyOfA": "jazz",
"propertyOfA": "baz",
"propertyOfB": "bar",
"propertyOfC": "foo"
}
Run Code Online (Sandbox Code Playgroud)
这是正确的,因为属性顺序在JSON中没有意义。但是,我的实际消息非常长-成千上万个字符-并且在浏览日志时,如果首先出现只有少数几个更通用的属性(来自基本模式,即模式C的属性),会更方便在消息中。
架构/类中的各个属性顺序并不会给我带来太多麻烦,但是如果我能让Jackson先降到层次结构然后回溯,那将是很好的选择。
{
"propertyOfC": "foo",
"propertyOfB": "bar",
"propertyOfA": "razz",
"propertyOfA": "jazz",
"propertyOfA": "baz"
}
Run Code Online (Sandbox Code Playgroud)
我检查了所有Features和MapperFeatures,发现唯一会影响顺序的是SORT_PROPERTIES_ALPHABETICALLY。
我还能在ObjectMapper-level上做其他事情,或者不改变类而影响该顺序吗?
您可以在其(生成的)源文件之外的类上应用mixin注释。例如
在新文件上,定义一个接口:
@JsonPropertyOrder({"propertyOfC", "propertyOfB"})
public interface MixinA {
}
Run Code Online (Sandbox Code Playgroud)
并将其注册到您的ObjectMapper:
objectMapper.addMixIn(A.class, MixinA.class);
Run Code Online (Sandbox Code Playgroud)
在此顺序注释中列出的属性首先出现,因此您可以跳过 A 的属性。
| 归档时间: |
|
| 查看次数: |
64 次 |
| 最近记录: |