我在 Java 应用程序中使用 Jackson 来序列化包含已知类型列表的对象。但是,Jackson 为列表中的每个项目添加了
@class
属性,我想省略该属性。以下是 JSON 输出的示例:
[
{
"@class": "com.example.model.Resource",
"id": "Resource_1",
"version": 0,
"reference": false,
"items": [
{
"@class": "com.example.model.Item", // I want to remove this
"id": "Item01",
"version": 0,
"status": "ACTIVE",
"index": 1,
"url": "https://example.com/item/1"
},
{
"@class": "com.example.model.Item", // I want to remove this
"id": "Item02",
"version": 0,
"status": "ACTIVE",
"index": 2,
"url": "https://example.com/item/2"
}
]
}
]
由于列表中项目的类型是已知的(Item),所以@class属性是多余的。如何配置 Jackson 的 ObjectMapper 以防止它在已知类型时将 @class 属性添加到列表元素?
附加信息:
我在应用程序的其他地方使用多态类型处理,因此我无法全局禁用它。 我只想抑制类型明确的特定列表的 @class 属性。
禁用默认类型:我考虑使用 mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); 全局禁用默认类型,但我不能这样做,因为我在应用程序的其他地方使用多态类型处理。
杰克逊无法得知您没有
com.example.model.Item
的儿童课程。所以你想要的是不可能的。