Estoy tratando de encontrar una forma óptima de deserializar campos dinámicos que contengan la misma estructura de objeto de valor:
"data": { "lastUpdate": 1605299294253, "tableData": [ { "recordId": 1, "isSelected": 1, "myKey1": { "valueRef": 72, "value": "Some value" }, "myKey2": { "valueRef": 0, "value": "123" } } ] }Para la matriz tableData JSON, probé este enfoque sin éxito:
import lombok.Data; import java.util.Map; @Data public class TableRowDataVO { private Integer recordId; private Integer recordStatus; private Map<String, TableRowDetailVO> columnData1; private Map<String, TableRowDetailVO> columnData2; } Esta clase está anidada en otra clase para abarcar todo el cuerpo JSON en data :
public class TabularDataDTO { private Long lastUpdate; private List<TableRowDataVO> tableData; }y cada campo dinámico contiene el mismo Objeto del siguiente tipo:
public class TableRowDetailVO { private Integer valueRef; private String value; } Tampoco hay garantía de que solo haya 2 claves dinámicas. Puede ser 0 para muchas claves dinámicas que están en TableRowDataVO , pero si hay limitaciones que requieren que me conforme con 2, puedo hacerlo, pero si son posibles 0 para muchos campos dinámicos, sería genial. Estoy tratando de usar ObjectMapper con TypeReference como TabularDataVO pero genera una excepción. ¿Cuál es la forma correcta de diseñar mis objetos de modo que TabularDataVO pueda ser deserializado por el mapeador?
dado que la clave es dinámica, cuando procesa datos necesita algún proceso especial.
@Data public class NewDTO { private Long lastUpdate; private List<Map<String, Object>> tableData; }Solo para entender bien tu pregunta. Tu Json es como el siguiente: -
"data": { "lastUpdate": 1605299294253, "tableData": [ { "recordId": 1, "isSelected": 1, "myKey1": { "valueRef": 72, "value": "Some value" }, "myKey2": { "valueRef": 0, "value": "123" } } ] }Diferente a
"data": { "lastUpdate": 1605299294253, "tableData": [ { "recordId": 1, "isSelected": 1, "keys": [ { "valueRef": 72, "value": "Some value" }, { "valueRef": 0, "value": "123" } ] } ] }Este último se puede deserializar fácilmente usando la biblioteca jackson y definiendo claves como List<Map<String, Object>>