No Jackson 2.5, uma maneira elegante de resolver isso é usar o método
TypeFactory.constructParametricType (Classe parametrizada, Classe ... parameterClasses) que permite definir diretamente um Jackson JavaType
especificando a classe parametrizada e seus tipos parametrizados.
Supondo que você deseja desserializar Data<String>
, você pode:
// the json variable may be a String, an InputStream and so for...
JavaType type = mapper.getTypeFactory().constructParametricType(Data.class, String.class);
Data<String> data = mapper.readValue(json, type);
Observe que se a classe declarasse vários tipos com parâmetros, não seria muito mais difícil:
class Data <T, U> {
int found;
Class<T> hits;
List<U> list;
}
Nós poderíamos fazer :
JavaType type = mapper.getTypeFactory().constructParametricType(Data.class, String.class, Integer);
Data<String, Integer> data = mapper.readValue(json, type);