Jackson - 使用泛型类反序列化

2022-08-31 06:01:08

我有一个json字符串,我应该将其反序列化为以下类

class Data <T> {
    int found;
    Class<T> hits
}

我该怎么做?这是通常的方式

mapper.readValue(jsonString, Data.class);

但是我如何提到T代表什么呢?


答案 1

您需要为使用的每个泛型类型创建一个对象,并将其用于反序列化。例如-TypeReference

mapper.readValue(jsonString, new TypeReference<Data<String>>() {});

答案 2

您不能这样做:您必须指定完全解析的类型,例如 . 只是一个变量,也是毫无意义的。Data<MyType>T

但是,如果你的意思是这将是已知的,只是不是静态的,你需要创建动态的等价物。引用的其他问题可能已经提到了这一点,但它应该看起来像这样:TTypeReference

public Data<T> read(InputStream json, Class<T> contentClass) {
   JavaType type = mapper.getTypeFactory().constructParametricType(Data.class, contentClass);
   return mapper.readValue(json, type);
}