I've got an application that stores some data in DynamoDB using Jackson to marshall my complex object into a JSON.
For example the object I'm marshalling might look like this:
private String aString;
private List<SomeObject> someObjectList;
Where SomeObject might look like this:
private int anInteger;
private SomeOtherObject;
and SomeOtherObject might look like this:
private long aLong;
private float aFloat;
This is fine an the object gets marshalled no problem and stored in the DB as a JSON string.
When it comes time to retrieve the data from DynamoDB Jackson automatically retrieves the JSON and converts it back... EXCEPT that 'someObjectList' is returned as a List<LinkedHashMap>
not as a List<SomeObject>
! This is standard behaviour for Jackson, its not a mistake that this is happening.
So now this leads to a problem. My code base thinks its dealing with a List<SomeObject>
but the reality is that its handling a List<LinkedHashMap>
! My question is how do I get my LinkedHashMap back into a 'SomeObject'. Obviously this is a manual process but what I mean is I can't even extract the values.
If I do this:
for (LinkedHashMap lhm : someObjectList) {
// Convert the values back
}
I get a compile error telling me that someObjectList is of type 'SomeObject' not LinkedHashMap.
If I do this:
for (SomeObject lhm : someObjectList) {
// Convert the values back
}
I get a runtime error telling me that LinkedHashMap cannot be cast to 'SomeObject'.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…