Отмена сортировки разных элементов DynamodB (из одной и той же таблицы DynamodB) для нескольких POJO

Контекст: у меня есть 3 Java-класса, которые имеют разные атрибуты, и представление JSON, которое соответствует этим классам, различается по структуре. Скажем, следующие 3 структуры JSON

JSON-представление для класса A

{
  "foo" : ["some string-a", "some string-b", "some string-c"],
  "bar" : 890,
  "maz" : {"x":-11, "y": 0, "z":89} 
}

JSON-представление для класса B

{
  "abo" : [{"key": "val", "anotherKey": "anotherValue"}]
  "seq" : [4, 7, 1, 3]
}

JSON-представление для класса C

{
  "zin" : "some nice text",
  "tag" : ["dynamodb", "unmarshalling", "different schemas", "same table"]
}

Я храню эти документы JSON в одной таблице в DynamoDB - назовем это tblStructures.

Почему я храню эти разные классы в одной и той же таблице DynamoDB? Потому что они принадлежат к одной бизнес-концепции. И иметь столько таблиц DynamoDB, сколько бизнес-концепций, не кажется логичным.

Вопрос: Как я могу демонтировать (десериализовать) эти элементы из одной и той же таблицы DynamodB в несколько Java-объектов?

1 ответ

Заимствуя подсказку из модуля для mongoose, которая обеспечивает простой способ работы с базовыми схемами и дифференцирует различные типы моделей в одной коллекции (так называемые "таблицы" в DynamodB), вы можете добавить _type свойство схемы каждой модели и использовать его в качестве подсказки для десериализации их с правильным классом.

Например:

JSON-представление для класса B

{
  "foo" : ["some string-a", "some string-b", "some string-c"],
  "bar" : 890,
  "maz" : {"x":-11, "y": 0, "z":89},
  "_type" : "modelA"
}

JSON-представление для класса B

{
  "abo" : [{"key": "val", "anotherKey": "anotherValue"}]
  "seq" : [4, 7, 1, 3],
  "_type" : "modelB"
}

Вы можете или не можете удалить _type свойство при сериализации в JSON (если вы решили, что полезно выставить объект, вы можете просто назвать его type).

В прошлом я использовал этот подход в сочетании с подпрограммой, чтобы автоматически обрабатывать все свойства, начинающиеся с "_", как частные поля и просто удалять их при сериализации в JSON (например, _password для хэшей паролей в объектах User и для других метаданных, которые я не собираюсь предоставлять напрямую).

Другие вопросы по тегам