Ho un'applicazione che memorizza alcuni dati in DynamoDB utilizzando Jackson per eseguire il marshalling del mio oggetto complesso in un JSON.Trasmissione di LinkedHashMap a un oggetto complesso
Per esempio l'oggetto che sto smistamento potrebbe essere simile a questo:
private String aString;
private List<SomeObject> someObjectList;
Dove SomeObject potrebbe essere simile a questo:
private int anInteger;
private SomeOtherObject;
e SomeOtherObject potrebbe essere simile a questo:
private long aLong;
private float aFloat;
Questo va bene a un oggetto non viene eseguito il marshalling e non viene memorizzato nel DB come una stringa JSON.
Quando arriva il momento di recuperare i dati da DynamoDB Jackson recupera automaticamente il JSON e lo converte indietro ... TRANNE che 'someObjectList' viene restituito come List<LinkedHashMap>
non come List<SomeObject>
! Questo è un comportamento standard per Jackson, non è un errore che ciò stia accadendo.
Quindi ora questo porta a un problema. Il mio codice base pensa che abbia a che fare con un List<SomeObject>
ma la realtà è che sta gestendo un List<LinkedHashMap>
! La mia domanda è: come posso riavere la mia LinkedHashMap in "SomeObject". Ovviamente questo è un processo manuale, ma quello che intendo è che non riesco nemmeno ad estrarre i valori.
Se faccio questo:
for (LinkedHashMap lhm : someObjectList) {
// Convert the values back
}
ottengo un errore di compilazione che mi diceva che someObjectList è di tipo 'SomeObject' non LinkedHashMap.
Se faccio questo:
for (SomeObject lhm : someObjectList) {
// Convert the values back
}
ottengo un errore di runtime che mi diceva che LinkedHashMap non può essere gettato a 'SomeObject'.
Tuttavia, il secondo esempio non richiede un riferimento statico al tipo POJO. –
@ BoSøborgPetersen Non sono abbastanza sicuro di cosa intendi per ... – StaxMan
Fantastico. L'unica cosa che dovevo fare è assicurarmi che la classe POJO contenga un costruttore predefinito (nel caso siano presenti altri costruttori parametrizzati) – Gnana