Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Jackson仅使用规范类型字符串反序列化JSON_Java_Jackson - Fatal编程技术网

Java 使用Jackson仅使用规范类型字符串反序列化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 } 公共类容器{ 私有字符串类型;

我有一个JSON字符串

{
    "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(){})会有所帮助;