Ho una classe Java MyPojo
che mi interessa deserializzare da JSON. Ho configurato una classe MixIn speciale MyPojoDeMixIn
, per aiutarmi con la deserializzazione. MyPojo
ha solo variabili di istanza int
e String
combinate con getter e setter appropriati. MyPojoDeMixIn
assomiglia a questo:
public abstract class MyPojoDeMixIn {
MyPojoDeMixIn(
@JsonProperty("JsonName1") int prop1,
@JsonProperty("JsonName2") int prop2,
@JsonProperty("JsonName3") String prop3) {}
}
Nel mio client di prova faccio quanto segue, ma ovviamente non funziona in fase di compilazione perché c'è un problema JsonMappingException
relativo a una mancata corrispondenza di tipo.
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) }
Sono consapevole che potrei alleviare questo problema creando un oggetto "Risposta" che contiene solo un ArrayList<MyPojo>
, ma poi dovrei creare questi oggetti un po 'inutili per ogni singolo tipo che voglio restituire.
Ho anche guardato online JacksonInFiveMinutes, ma ho passato dei momenti terribili a capire le cose Map<A,B>
e come si relazionano al mio problema. Se non puoi dirlo, sono completamente nuovo in Java e provengo da un background Obj-C. Menzionano specificamente:
Oltre all'associazione a POJO e tipi "semplici", esiste un'ulteriore variante: quella di associazione a contenitori generici (tipizzati). Questo caso richiede una gestione speciale a causa del cosiddetto Type Erasure (utilizzato da Java per implementare i generici in un modo piuttosto compatibile con le versioni precedenti), che impedisce di utilizzare qualcosa come Collection.class (che non si compila).
Quindi, se vuoi legare i dati in una mappa, dovrai usare:
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
Come posso deserializzare direttamente in ArrayList
?