在Jackson中,實現多態反序列化可以使用@JsonTypeInfo
注解和@JsonSubTypes
注解。
@JsonTypeInfo
注解,指定多態類型的字段名和默認的多態類型處理策略。例如:@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
public abstract class Animal {
private String name;
// ...
}
@JsonSubTypes
注解,指定不同子類對應的多態類型名稱。例如:@JsonSubTypes({
@JsonSubTypes.Type(value = Cat.class, name = "cat"),
@JsonSubTypes.Type(value = Dog.class, name = "dog")
})
public abstract class Animal {
// ...
}
String json = "{\"type\":\"cat\",\"name\":\"Tom\"}";
ObjectMapper objectMapper = new ObjectMapper();
Animal animal = objectMapper.readValue(json, Animal.class);
上述代碼中,根據JSON字符串中的"type":"cat"
字段值,Jackson會自動將其反序列化為Cat
類的實例。
注意:上述示例中的Animal
類是一個抽象類,如果需要實例化Animal
對象,可以將其改為普通類或者使用@JsonTypeIdResolver
注解來指定一個自定義的類型解析器。