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 這個字段缺脉。這個時候如果你使用的外層對象也是多態(tài)那么就無法反序列化技肩。
解決方案就是自己再創(chuàng)建一個對象這個對象無需多態(tài)序列化苫亦,把這個對象作為外層對象的時候就可以實現(xiàn)反序列化了
例如:
import lombok.Data;
import java.util.List;
/**
* 使用這個對象的原因是在jackson里使用多態(tài)序列化和反序列化是斋否,在反序列化的時候會無法反序列化多態(tài)多項這個時候需要一層包裝對象(不需要多態(tài)反序列化的對象)
*
*/
@Data
public class ComponentLinkHolder {
private List<ComponentLink> componentLinkList;
}
問題得到解決