【发布时间】:2022-01-26 21:05:44
【问题描述】:
我需要反序列化的 JSON 如下所示:
{
"data": [{
"id": "id1",
"type": "type1"
"name": "John",
...
},
{
"id": "id2",
"type": "type2",
"name": "Rebecca",
...
},
{
"id": "id3",
"type": "unknown",
"name": "Peter",
...
}]
}
为了对上面写的 JSON 进行反序列化,我创建了几个类:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type",
defaultImpl = DefaultData.class
)
@JsonSubTypes({
@JsonSubTypes.Type(value = Type1Data.class, name = "type1"),
@JsonSubTypes.Type(value = Type2Data.class, name = "type2")
})
public class AbstractData {
public final String id;
public final String type;
public final String name;
public AbstractData(String id, String type, String name) {
this.id = id;
this.type = type;
this.name = name;
}
}
public class Type1Data extends AbstractData {
@JsonCreator
public Type1Data(@JsonProperty("id") String id,
@JsonProperty("name") String name
) {
super(id, "type1", name);
}
}
public class DefaultData extends AbstractData {
@JsonCreator
public DefaultData(@JsonProperty("id") String id,
@JsonProperty("type") String type,
@JsonProperty("name") String name
) {
super(id, type, name);
}
}
public class Main {
public static void main(String... args) {
ObjectMapper mapper = new ObjectMapper();
AbstractData data = mapper.readValue(json, AbstractData.class);
}
}
如果我使用默认实现,我会得到一个异常:
com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id 'unknown' as a type
DefaultData 类如果我会得到未知类型,我需要避免反序列化异常。
我该如何解决这个问题?
【问题讨论】:
-
使用的是哪个版本的 Jackson?
-
@SergeyVyacheslavovichBrunov 我使用
2.10.2版本。
标签: java json jackson jackson-databind