Jackson - 反序列化通用类变量

新手上路,请多包涵

我错误地发布了问题。我在这里正确发布问题……

我收到一个 json 字符串作为 HTTP 响应。我知道它的结构。它是这样的:

 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;
}

“数据”字段可以属于任何类。我只会在运行时知道它。我会把它作为参数。这就是我反序列化的方式。

 public <T> void deSerialize(Class<T> clazz) {
    ObjectMapper mapper = new ObjectMapper();
    mapper.readValue(jsonString,  new TypeReference<Json<T>>() {});
}

但我收到一个错误 -

无法从 java.lang.class 访问私有 java.lang.class.Class()。无法设置访问权限。无法使 java.lang.Class 构造函数可访问

原文由 gnjago 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 368
1 个回答

如果通用类型仅动态可用,您将需要显式构建 JavaType

 // 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));
}

原文由 StaxMan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题