java - readvalue - Lanzar LinkedHashMap al objeto complejo
objectmapper convertvalue (1)
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<POJO> pojos = mapper.convertValue(listOfObjects, new TypeReference<List<POJO>>() { });
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.
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<SomeObject> 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<LinkedHashMap>
no como una List<SomeObject>
! 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<SomeObject>
pero la realidad es que está manejando una List<LinkedHashMap>
! 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 compilació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''.