将不同的发电机组项目(从同一发电机组表)解组到多个POJO - java

内容:
我有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对象?

参考方案

从猫鼬模块中借用一个技巧,该技巧提供了一种使用基本模式并区分同一集合中不同类型的模型(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很有用)。

过去,我将这种方法与例程结合使用,以自动将所有以“ _”开头的属性视为私有字段,并在序列化为JSON时将它们剥离(例如,对于用户对象中的密码散列,_password以及其他我不想直接公开的元数据)。

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

字符串内存分配 - java

哪一个更好System.out.println("hello world"); 要么String s="hello world"; System.out.println(s); 参考方案 对于此简单示例,在内存分配方面没有区别。