我有一些存在于層次結構中的 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 的屬性。
添加回答
舉報
0/150
提交
取消