om.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve subtype of [simple type, class cn.cc.hkzk.dto.ComponentLink]: missing type id property 'componentType'
父类:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "componentType"
)
@JsonSubTypes({
@JsonSubTypes.Type(value = ComponentLink4Task.class, name = "task"),
@JsonSubTypes.Type(value = ComponentLink4Module.class, name = "module")
})
public abstract class ComponentLink {
子类:
@Slf4j
@Data
public class ComponentLink4Module extends ComponentLink {}
@Slf4j
@Data
public class ComponentLink4Task extends ComponentLink {}
在序列化的时候就没有问题,但是在反序列化的时候会上述错误,这里的原因是jackson 在序列化的时候并不会将外层对象也添加类型id即componentType 这个字段。这个时候如果你使用的外层对象也是多态那么就无法反序列化。
解决方案就是自己再创建一个对象这个对象无需多态序列化,把这个对象作为外层对象的时候就可以实现反序列化了
例如:
import lombok.Data;
import java.util.List;
/**
* 使用这个对象的原因是在jackson里使用多态序列化和反序列化是,在反序列化的时候会无法反序列化多态多项这个时候需要一层包装对象(不需要多态反序列化的对象)
*
*/
@Data
public class ComponentLinkHolder {
private List<ComponentLink> componentLinkList;
}
问题得到解决