Кастинг LinkedHashMap для сложного объекта

У меня есть приложение, которое хранит некоторые данные в DynamoDB, используя Jackson для сортировки моего сложного объекта в JSON.

Например, объект, который я собираю, может выглядеть так:

private String aString; private List someObjectList; 

Где SomeObject может выглядеть так:

 private int anInteger; private SomeOtherObject; 

и SomeOtherObject может выглядеть так:

 private long aLong; private float aFloat; 

Это нормально, объект не сортируется без проблем и хранится в БД как строка JSON.

Когда придет время для извлечения данных из DynamoDB, jackson автоматически извлекает JSON и преобразует его обратно … ИСКЛЮЧАЕТ, что «someObjectList» возвращается как List не как List ! Это стандартное поведение для jacksonа, это не ошибка, что это происходит.

Так что теперь это приводит к проблеме. Моя база кода думает, что она имеет дело со List но реальность такова, что ее обработка List ! Мой вопрос в том, как вернуть LinkedHashMap в «SomeObject». Очевидно, что это ручной процесс, но я имею в виду, что я даже не могу извлечь значения.

Если я это сделаю:

 for (LinkedHashMap lhm : someObjectList) { // Convert the values back } 

Я получаю ошибку компиляции, сообщающую мне, что someObjectList имеет тип «SomeObject», а не LinkedHashMap.

Если я это сделаю:

 for (SomeObject lhm : someObjectList) { // Convert the values back } 

Я получаю ошибку времени выполнения, сообщающую мне, что LinkedHashMap нельзя отнести к «SomeObject».

Вы можете использовать ObjectMapper.convertValue() либо значение по значению, либо даже для всего списка. Но вам нужно знать тип конвертирования:

 POJO pojo = mapper.convertValue(singleObject, POJO.class); // or: List pojos = mapper.convertValue(listOfObjects, new TypeReference>() { }); 

это функционально так же, как если бы вы это сделали:

 byte[] json = mapper.writeValueAsBytes(singleObject); POJO pojo = mapper.readValue(json, POJO.class); 

но избегает фактической сериализации данных как JSON, вместо этого используется последовательность событий в памяти в качестве промежуточного шага.

  • Разделение списка в подсписках по элементам
  • JPA: ПРИСОЕДИНЯЙТЕСЬ в JPQL
  • Использование для необязательного
  • Разбор строки JSON в Java
  • Использовать строковые методы для поиска и подсчета гласных в строке?
  • исключение в streamе 'main' java.lang.NoClassDefFoundError:
  • Неправильная публикация ссылки на объект Java
  • Проверьте, не является ли строка пустой и не пустой
  • Заказ streamов для запуска в том порядке, в котором они были созданы / запущены
  • Почему не могут быть защищены или публиковаться в Java?
  • Каков наиболее рекомендуемый способ хранения времени в PostgreSQL с помощью Java?
  • Давайте будем гением компьютера.