Tengo una aplicación que almacena algunos datos en DynamoDB utilizando Jackson para ordenar mi objeto complejo en un JSON.
Por ejemplo, el objeto que estoy coordinando podría verse así:
private String aString; private List someObjectList;
Donde SomeObject podría tener este aspecto:
private int anInteger; private SomeOtherObject;
y SomeOtherObject podría verse así:
private long aLong; private float aFloat;
Esto está bien y el objeto se organiza sin problemas y se almacena en el DB como una cadena JSON.
Cuando llega el momento de recuperar los datos de DynamoDB Jackson recupera automáticamente el JSON y lo convierte de nuevo … ¡EXCEPTO que ‘someObjectList’ se devuelve como una List
no como una List
! Este es un comportamiento estándar para Jackson, no es un error que esto esté sucediendo.
Entonces, esto lleva a un problema. Mi base de código piensa que se trata de una List
pero la realidad es que está manejando una List
! Mi pregunta es cómo puedo volver a vincular mi LinkedHashMap a un ‘SomeObject’. Obviamente, este es un proceso manual, pero lo que quiero decir es que ni siquiera puedo extraer los valores.
Si hago esto:
for (LinkedHashMap lhm : someObjectList) { // Convert the values back }
Aparece un error de comstackción al decirme que someObjectList es del tipo ‘SomeObject’ no LinkedHashMap.
Si hago esto:
for (SomeObject lhm : someObjectList) { // Convert the values back }
Aparece un error de tiempo de ejecución que me dice que LinkedHashMap no se puede convertir a ‘SomeObject’.
Puede usar ObjectMapper.convertValue()
, ya sea valor por valor o incluso para toda la lista. Pero necesita saber el tipo para convertir a:
POJO pojo = mapper.convertValue(singleObject, POJO.class); // or: List pojos = mapper.convertValue(listOfObjects, new TypeReference>() { });
esto es funcionalmente lo mismo que si lo hicieras:
byte[] json = mapper.writeValueAsBytes(singleObject); POJO pojo = mapper.readValue(json, POJO.class);
pero evita la serialización real de los datos como JSON, en su lugar utiliza una secuencia de eventos en la memoria como paso intermedio.