我有以下层次结构:
@Entity
@Table(name = "...")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", visible = true, defaultImpl = A.class)
@JsonSubTypes({ @JsonSubTypes.Type(value = B.class, name = "B") })
public abstract class Base implements IJPAEntity<String>, Jsonable {
/*
implementation
*/
}
@Entity
@Table(name = "...")
public class A extends Base {
/*
implementation
*/
}
@Entity
@Table(name = "...")
public class B extends Base {
/*
implementation
*/
}
每当我进行以下反序列化时,一切都很好:
String testJSON = "{\"id\": \"someId\",\"description\": \"someDescription\",\"type\": \"B\"}";
Base b = new ObjectMapper().readValue(testJSON, Base.class);
杰克逊成功地将JSON字符串反序列化为 B 对象,并指定类型为 Base 的引用。
但是我尝试进行相同类型的反序列化的那一刻,但对于一个集合,我得到一个例外:
String testJSON = "[{\"id\": \"someId\",\"description\": \"someDescription\",\"type\": \"B\"}, {\"id\": \"anotherId\",\"description\": \"anotherDescription\",\"type\": \"B\"}]";
List<Base> list = new ObjectMapper().readValue(testJSON, new TypeReference<List<Base>>(){});
org.springframework.cloud.cloudfoundry.com.fasterxml.jackson.databind.JsonMappingException:无法构造com.mycomp的实例...基础,问题:抽象类型要么需要映射到具体类型,要有自定义反序列化器,或使用其他类型信息进行实例化
换句话说,当我尝试将包含不同类型对象的JSON数组反序列化为基类型Jackson的容器时,会抛出异常。
我尝试过调整很多东西,但似乎没有解决它。
任何想法都将不胜感激!