首页 > 解决方案 > 杰克逊转换中无法识别的字段“类”

问题描述

我有一个包含子类数组的 java 类:

@com.fasterxml.jackson.annotation.JsonTypeInfo(use = com.fasterxml.jackson.annotation.JsonTypeInfo.Id.CLASS, include = com.fasterxml.jackson.annotation.JsonTypeInfo.As.PROPERTY, property = "class", visible = true)
public class Zoo {
  Date stamp=new Date();

  public Date getStamp() {
    return stamp;
  }

  public void setStamp(Date stamp) {
    this.stamp = stamp;
  }

  List<Animal> animals;

  public List<Animal> getAnimals() {
    return animals;
  }

  public void setAnimals(List<Animal> animals) {
    this.animals = animals;
  }
}

当我用多种动物类型实例化这个类并使用杰克逊的新 ObjectMapper().writeValueAsString(zoo) 对其进行转换时,我得到以下字符串:

{
  "stamp": 1556129201484,
  "animals": [
    {
      "class": "com.test.Cat",
      "title": "Tom"
    },
    {
      "class": "com.test.Dog",
      "title": "Jerry"
    },
  ]
}

当我尝试使用 new ObjectMapper().readValue(s, Zoo.class) 将此 json 字符串转换回对象时,出现以下错误:

无法识别的字段“class”(com.test.Cat 类),未标记为可忽略

不确定如何配置映射器以将此字段识别为 Animal 的子类类型。我尝试使用 class ListofAnimals extends ArrayList { }; 但这也不起作用。

关于如何执行此转换的任何想法?

标签: javajsonjackson

解决方案


推荐阅读