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 sólo int
y String
de instancia de variables combinadas con captadores y definidores adecuados. MyPojoDeMixIn
se parece a esto:
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, no funciona en tiempo de compilación porque hay JsonMappingException
una falta de coincidencia de tipos relacionada.
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 podría solucionar este problema creando un objeto "Respuesta" que solo tenga un elemento ArrayList<MyPojo>
, pero luego tendría que crear estos objetos algo inútiles para cada tipo que quiero devolver.
También miré en línea JacksonInFiveMinutes, pero me costó mucho entender el tema Map<A,B>
y cómo se relaciona con mi problema. Si no puede decirlo, soy completamente nuevo en Java y tengo experiencia en Obj-C. Mencionan específicamente:
Además de la vinculación a POJO y tipos "simples", hay una variante adicional: la de vinculación a contenedores genéricos (con tipo). Este caso requiere un manejo especial debido al llamado Type Erasure (usado por Java para implementar genéricos de una manera algo compatible con versiones anteriores), que le impide usar algo como Collection.class (que no se compila).
Entonces, si desea vincular datos en un mapa, deberá usar:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
¿Cómo puedo deserializar directamente a ArrayList
?