Tengo una clase de Java MyPojo
que estoy interesado en deserializar de JSON. He configurado una clase MixIn especial, MyPojoDeMixIn
, para ayudarme con la deserialización. MyPojo
tiene solo int
y String
variables de instancia combinadas con getters y setters apropiados. MyPojoDeMixIn
se ve algo como esto:Deserializar JSON a ArrayList <POJO> usando Jackson
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
En mi cliente de prueba hago lo siguiente, pero por supuesto que no funciona en tiempo de compilación, porque hay una JsonMappingException
relacionada con una coincidencia de tipos.
ObjectMapper m = new ObjectMapper();
m.getDeserializationConfig().addMixInAnnotations(MyPojo.class,MyPojoDeMixIn.class);
try { ArrayList<MyPojo> arrayOfPojo = m.readValue(response, MyPojo.class); }
catch (Exception e) { System.out.println(e) }
Soy consciente de que podía aliviar este problema mediante la creación de un objeto "Respuesta" que sólo tiene un ArrayList<MyPojo>
en ella, pero entonces tendría que crear estas un tanto inútiles objetos para cada tipo solo quiero volver .
También busqué en línea en JacksonInFiveMinutes pero tuve un tiempo terrible entendiendo las cosas sobre Map<A,B>
y cómo se relaciona con mi problema. Si no puede decirlo, soy completamente nuevo en Java y procedo de un entorno Obj-C. Ellos específicamente mencionan:
Además de la unión a POJOs y tipos "simples", no es una variante adicional: la de la unión a contenedores genéricos (mecanografiadas). Este caso requiere un manejo especial debido al denominado Tipo Borrado (utilizado por Java para implementar genéricos en forma un tanto retrocompatible ), que le impide utilizar algo como Collection.class (que no compila).
Así que si desea enlazar los datos en un mapa, necesitará utilizar:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Como puedo deserializar directamente a ArrayList
?
Su respuesta parece estar relacionado con la información sobre cómo utilizar el soporte integrado para 'TypeReference' - Simplemente no entiendo cómo hacerlo ... Por favor, vea mi edición anterior por sus instrucciones sobre cómo para usar genéricos –
Bueno, está relacionado. Pero esto es un fragmento del código de trabajo en producción. Olvídese de su mixin, solo use el código que he mostrado (pero reemplace POJO, por supuesto, con el nombre de su clase de bean real). – Perception
Tu código compilado, pero obtengo una excepción de tiempo de ejecución cuando intento imprimir 'arrayList.toString()' sobre una 'NullPointerException'. Supongo que esto podría ser porque mi 'POJO' no se ajusta a las convenciones de nomenclatura correctas para sus propiedades, es decir, todo el problema es que el servicio web devuelve' Prop1Member' y mi objeto tiene 'Prop1'. Esta es la única razón real por la que estoy usando mixins para empezar, así que no tengo que poner las declaraciones para '@ JsonProperty' en mis objetos puros. –