让我解释一下它是如何使用下面的类和示例 JSON 字符串工作的。假设我们有两个类,如下所示:
class TestWrapper<T> {
private List<Map<String, T>> list = new ArrayList<Map<String, T>>();
public List<Map<String, T>> getList() {
return list;
}
public void setList(List<Map<String, T>> list) {
this.list = list;
}
}
class Entity {
private long id;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}
并在 JSON 字符串下方作为输入:
{
"list" : [ {
"entity" : {
"id" : 0
}
} ]
}
现在,当我们尝试使用以下代码对 JSON 进行反序列化时,我们将看到 Jackson 将未知类型反序列化为Map
类:
TestWrapper<?> result = mapper.readValue(json, TestWrapper.class);
System.out.println(result.getList().get(0).get("entity").getClass());
上面的程序打印:
class java.util.LinkedHashMap
如果要定义值的类型,则必须使用JSON 反序列化过程Map
构建它并提供给它。TypeFactory
TypeFactory typeFactory = mapper.getTypeFactory();
JavaType type = typeFactory.constructParametricType(TestWrapper.class, Entity.class);
TestWrapper<Entity> result = mapper.readValue(json, type);
System.out.println(result.getList().get(0).get("entity").getClass());
上面的程序打印:
class your.package.Entity
如您所见,您可以提供泛型类型,将复杂JavaType
对象提供给反序列化过程。