2012-08-13 19 views
28

Para deserialise cadena JSON a una lista de clase, diferentes formas enumeradas en StackOverflow questionJackson - Deserialising JSON cadena - typereference vs TypeFactory.constructCollectionType

tipo 1 (docs link):

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

tipo 2 (docs link):

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

Aunque los dos tipos anteriores hacen el trabajo, ¿cuál es la diferencia entre estas implementaciones? ?

Respuesta

29

Después de construir JavaType, ambos llaman a la misma funcionalidad de deserialización, por lo que la única diferencia es la forma en que se maneja el tipo genérico.

El segundo es completamente estático, por lo que el tipo debe conocerse en tipo de compilación y no puede variar. Por lo tanto, es similar al uso de literal de clase básica.

El primero es dinámico, por lo que se puede usar para construir cosas que varían con respecto a su parametrización.

Personalmente prefiero la primera alternativa para todos los casos (evita la creación de una clase interna más anónima), pero la segunda puede ser más legible.

Cuestiones relacionadas