Depuis Jackson 2.5, une manière élégante de résoudre ce problème est d'utiliser la fonction TypeFactory.constructParametricType(Classe paramétrée, Classe... parameterClasses) méthode qui permet de définir de façon précise un Jackson JavaType
en spécifiant la classe paramétrée et ses types paramétrés.
Supposons que vous voulez désérialiser en Data<String>
vous pouvez le faire :
// 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);
Notez que si la classe déclarait plusieurs types paramétrés, ce ne serait pas vraiment plus difficile :
class Data <T, U> {
int found;
Class<T> hits;
List<U> list;
}
Nous pourrions faire :
JavaType type = mapper.getTypeFactory().constructParametricType(Data.class, String.class, Integer);
Data<String, Integer> data = mapper.readValue(json, type);