Java 使用Jackson仅使用规范类型字符串反序列化JSON
我有一个JSON字符串Java 使用Jackson仅使用规范类型字符串反序列化JSON,java,jackson,Java,Jackson,我有一个JSON字符串 { "type": "com.example.model.Person", "data": { "firstName": "Bob", ... } } 它由以下类表示 public class Container<T> { private String type; private T data; // Getters and Setters } 公共类容器{ 私有字符串类型;
{
"type": "com.example.model.Person",
"data": {
"firstName": "Bob",
...
}
}
它由以下类表示
public class Container<T> {
private String type;
private T data;
// Getters and Setters
}
公共类容器{
私有字符串类型;
私有T数据;
//接球手和接球手
}
(我甚至尝试过删除泛型类型,并将其替换为Object
)
我尝试了以下方法:
newObjectMapper().readValue(json,Class.forName(canonical))
new ObjectMapper().readValue(json,TypeFactory.defaultInstance().constructFromCanonical(canonical))
我需要能够使用给定的规范类型字符串将JSON字符串反序列化到
容器
实例中。如何做到这一点?我尝试了同样的例子,它对我很有效
它是否与您正在查找的相同或其他内容如果您信任
类型
字段,请使用@JsonTypeInfo(use=CLASS,property=“type”)
,为了灵活性,我更喜欢抽象的名称
,比如仅仅个人
。@chrylis onstrike-我过去对多态类型使用过这些机制,但不是泛型类型。假设您不必注册所有子类型,这可能会起作用。如果你有时间创造一个完整的答案,那将是伟大的。我不知道如何把这些碎片拼在一起。不完全一样。您正在使用Container.class
告诉jackson您希望反序列化字符串的类型。您只能使用类型
属性中的值:com.example.model.Person
。当然,假设您还有一个派生的Person类。可能是TypeReference,在这种情况下Person c=mapper.readValue(json,new-TypeReference(){})会有所帮助;