我需要反序列化JSON以使对象依赖于类型。我有以下JSON:
{
"type": "dog",
"name": "dogName"
}我有以下课程:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "dog"),
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
})
public abstract class Animal {
@JsonProperty("type")
public String type;
public String name;
}
public class Dog extends Animal {
...
}
public class Cat extends Animal {
...
}当我试图反序列化时,一切都很好:
public class StartPdfApp {
public static void main(String[] args) throws IOException {
...
ObjectMapper mapper = new ObjectMapper();
Animal animal = mapper.readValue(json, Animal.class);
System.out.println("TYPE: " + animal.type); // always null
System.out.println("DOG: " + (animal instanceof Dog));
System.out.println("CAT: " + (animal instanceof Cat));
}
}但是,当我想获得字段值type时,我有null,如何修复它?
发布于 2019-11-18 13:12:15
您需要告诉Jackson将类型字段传递给反序列化器,否则它只用于类型识别。这是通过属性visible在@JsonTypeInfo注释中完成的。另外,不确定在您的情况下是否有严格的必要,但我指定要使用现有属性的类型信息:
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.EXISTING_PROPERTY,
property = "type",
visible = true)
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "dog"),
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
})
public abstract class Animal {
@JsonProperty("type")
public String type;
public String name;
}https://stackoverflow.com/questions/58915120
复制相似问题