杰克逊 - 反序列化泛型类变量 [英] Jackson - Deserialize Generic class variable
问题描述
我错误地发布了这个问题。我在这里正确地发布了问题......
我得到一个json字符串作为HTTP响应。我知道它的结构。它如下所示:
public class Json< T> {
public Hits< T>命中;
}
public class Hits< T> {
public int found;
public int start;
public ArrayList< Hit< T>>击中;
}
public class Hit< T> {
public String id;
public Class< T>数据;
$ / code>
data字段可以属于任何类别。我只会在运行时才知道它。我将把它作为参数。这就是我的反序列化过程。
public< T> void deSerialize(Class< T> clazz){
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonString,new TypeReference< Json< T>>(){});
}
但是我收到一个错误 -
无法从java.lang.class访问private java.lang.class.Class()。无法设置访问权限。无法创建java.lang.Class构造函数
您将需要构建 JavaType
明确地说,如果泛型类型只是动态可用的:
//不要为每个请求创建新的ObjectMapper!
final ObjectMapper mapper = new ObjectMapper();
public Json< T> void deSerialize(Class< T> clazz,InputStream json){
return mapper.readValue(json,
mapper.getTypeFactory()。constructParametricType(Json.class,clazz));
}
I had posted the question wrongly. I am posting the question correctly here ...
I am getting a json string as a HTTP response. I know the structure of it. It is as follows:
public class Json<T> {
public Hits<T> hits;
}
public class Hits<T> {
public int found;
public int start;
public ArrayList<Hit<T>> hit;
}
public class Hit<T> {
public String id;
public Class<T> data;
}
The "data" field can belong to any class. I will know it at runtime only. I will get it as a parameter. This is how I am deserializing.
public <T> void deSerialize(Class<T> clazz) {
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonString, new TypeReference<Json<T>>() {});
}
But I am getting an error -
cannot access private java.lang.class.Class() from java.lang.class. Failed to set access. Cannot make a java.lang.Class constructor accessible
You will need to build JavaType
explicitly, if generic type is only dynamically available:
// do NOT create new ObjectMapper per each request!
final ObjectMapper mapper = new ObjectMapper();
public Json<T> void deSerialize(Class<T> clazz, InputStream json) {
return mapper.readValue(json,
mapper.getTypeFactory().constructParametricType(Json.class, clazz));
}
这篇关于杰克逊 - 反序列化泛型类变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!