Отмена сортировки разных элементов 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 и для других метаданных, которые я не собираюсь предоставлять напрямую).