使用ObjectMapper将Json转换为Java对象的最佳方法是什么



我正在将Java对象转换为Json格式,以将它们保存到数据库中。当我从数据库中获得这些Json时,我需要将它们转换为它们来自的对象。为了做到这一点,我保存了对象的类型,当我从数据库中获得Json时,我会用if子句检查它们的Object类型,但我认为这不是有大量对象的最佳方式。有最简单的方法吗?

数据库表结构:

id | json_data | data_type
--------------------------
1 | "{a:1 ..} | TypeA
--------------------------
2 | so on.......

将Json转换为Java对象的Java示例:

ObjectMapper om = new ObjectMapper();
List<SpringEntityObject> allData = getAllDataFromDB();
for (SpringEntityObject o : allData) {
if (o.getDataType().equals("TypeA")) {
TypeA typeA = om.readValue(o.getJsonData(), TypeA.class);
// there should be a simpler way to do this?
....
} else if (o.getDataType().equals("TypeB")) {
TypeB typeB = om.readValue(o.getJsonData(), TypeB.class);
....
} ......
else {....}
}

您可能遇到的主要问题是,每次添加新类时都需要更改此代码块。

您可以将类的全名(带命名空间(存储在";data_type";列,并使用Class.forName动态获取该类。这允许您在不更改反序列化代码的情况下添加类,这有助于维护。

for (SpringEntityObject o : allData) {
Class clazz = Class.forName(o.getDataType());
Object deserializedObject = om.readValue(o.getJsonData(), clazz);
}

请注意,如果重命名/移动数据库中的类名(通过迁移脚本(,则需要同步这些类名。

最新更新