将不同的dynamodb项(从同一个dynamodb表)解组到多个POJO

时间:2016-03-03 18:46:04

标签: java amazon-web-services amazon-dynamodb unmarshalling json-deserialization

上下文 我有3个具有不同属性的java类,与这些类对应的JSON表示在结构上有所不同。假设以下是3个JSON结构

A类的JSON表示

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

B类的JSON表示

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

C类的JSON表示

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

我将这些JSON文档存储在dynamoDB的一个表中 - 让我们称之为tblStructures。

为什么我将这些不同的类存储在同一个DynamoDB表中?因为它们属于同一个商业概念。拥有与业务概念一样多的DynamoDB表并不合乎逻辑。

问题: 如何将这些项从同一个dynamodb表解组(反序列化)到多个Java对象?

1 个答案:

答案 0 :(得分:0)

从模块中借用mongoose的提示,提供了一种简单的方法来处理基本模式并区分同一集合中的不同类型的模型(在dynamodb中也称为“表”),您可以添加_type属性每个模型的模式,并使用它作为提示,使用正确的类反序列化它们。

例如:

B类的JSON表示

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

B类的JSON表示

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

在序列化为JSON时,您可能想要删除_type属性,也可能不想删除type属性(如果您认为暴露在对象上是有用的,只需将其命名为_password)。

我过去使用这种方法结合一个例程来自动处理以“_”开头的所有属性作为私有字段,并在序列化为JSON时将其剥离(例如{{1}}用于用户密码哈希对象,以及我不打算直接暴露的其他元数据。)