web-dev-qa-db-fra.com

Jackson - Désérialisation de la chaîne JSON - TypeReference vs TypeFactory.constructCollectionType

Pour désérialiser la chaîne JSON en une liste de classe, différentes manières listées sur question StackOverflow

Type 1 ( lien docs ):

List<SomeClass> someClassList = mapper.readValue(jsonString, typeFactory.constructCollectionType(List.class, SomeClass.class));

Type 2 ( lien docs ):

List<SomeClass> list = mapper.readValue(jsonString, new TypeReference<List<SomeClass>>() { });

Bien que les deux types ci-dessus fonctionnent, quelle est la différence entre ces implémentations?

38
Arun

Après avoir construit JavaType, les deux appellent la même fonctionnalité de désérialisation, donc la seule différence est la façon dont le type générique est géré.

Le second est entièrement statique, donc le type doit être connu dans le type de compilation et ne peut pas varier. Il est donc similaire à l'utilisation du littéral de classe de base.

Le premier est dynamique, il peut donc être utilisé pour construire des choses qui varient en fonction de leur paramétrage.

Personnellement, je préfère la première alternative pour tous les cas (cela évite la création d'une classe interne anonyme de plus), mais la seconde peut être plus lisible.

38
StaxMan