试图将Json序列化为对象,它们已经实现并且具有非原始数据类型。这是我要运行的代码。
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include =
JsonTypeInfo.As.WRAPPER_OBJECT)
@JsonSubTypes({
@JsonSubTypes.Type(value = Child.class, name = "Child")
})
public interface Parent {
}
。
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"cdata"
})
public class Child implements Serializable, Parent {
private static final long serialVersionUID = 34658537546173718L;
@JsonProperty("cdata")
private Cdata cdata;
}
。
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"version"
})
public class Cdata implements Serializable {
private static final long serialVersionUID = -7706669244151885541L;
private String version;
}
。
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
mapper.configure( MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true );
Parent parent = mapper.readValue("jsonString", Parent.class);
这是我运行上述代码时遇到的错误:
com.fasterxml.jackson.databind.exc.InvalidTypeIdException:无法将类型id'cdata'解析为[简单类型,类Child]的子类型:已知类型id = [Child]
答案 0 :(得分:0)
在@Baldy的帮助下,确定。我发现 将默认类型更改为OBJECT_AND_NON_CONCRETE解决了该问题。
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE);