如何防止 Jackson 在已知类型的列表中序列化 @class 属性?

问题描述 投票:0回答:1

我在 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); 全局禁用默认类型,但我不能这样做,因为我在应用程序的其他地方使用多态类型处理。

java json serialization jackson deserialization
1个回答
0
投票

杰克逊无法得知您没有

com.example.model.Item
的儿童课程。所以你想要的是不可能的。

© www.soinside.com 2019 - 2024. All rights reserved.