使用 ObjectMapper 将 Json 对象转换为 Java 对象的最佳方法是什么?
What is the Best Way for Converting a Json to a Java Object with Using ObjectMapper?
我正在将 Java 对象转换为 Json 格式以将它们保存到数据库中。当我从数据库中获取这些 Json 时,我需要将它们转换为它们来自的对象。为此,我保存对象的类型,当我从数据库中获取 Jsons 时,我使用 if 子句检查它们的对象类型,但我认为这不是有大量对象的最佳方式。有没有最简单的方法来做到这一点?
数据库table结构:
id | json_data | data_type
--------------------------
1 | "{a:1 ..} | TypeA
--------------------------
2 | so on.......
Java 将 Jsons 转换为 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 {....}
}
您可能遇到的主要问题是每次添加新的 class.
时都需要更改此代码块
您可以在“data_type”列中存储 class 的全名(带命名空间),并使用 Class.forName 动态获取 class。这允许您在不更改反序列化代码的情况下添加 classes,这有助于维护。
for (SpringEntityObject o : allData) {
Class clazz = Class.forName(o.getDataType());
Object deserializedObject = om.readValue(o.getJsonData(), clazz);
}
请注意,如果您重命名/移动它们(通过迁移脚本),您将需要在数据库中同步 class 名称。
我正在将 Java 对象转换为 Json 格式以将它们保存到数据库中。当我从数据库中获取这些 Json 时,我需要将它们转换为它们来自的对象。为此,我保存对象的类型,当我从数据库中获取 Jsons 时,我使用 if 子句检查它们的对象类型,但我认为这不是有大量对象的最佳方式。有没有最简单的方法来做到这一点?
数据库table结构:
id | json_data | data_type
--------------------------
1 | "{a:1 ..} | TypeA
--------------------------
2 | so on.......
Java 将 Jsons 转换为 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 {....}
}
您可能遇到的主要问题是每次添加新的 class.
时都需要更改此代码块您可以在“data_type”列中存储 class 的全名(带命名空间),并使用 Class.forName 动态获取 class。这允许您在不更改反序列化代码的情况下添加 classes,这有助于维护。
for (SpringEntityObject o : allData) {
Class clazz = Class.forName(o.getDataType());
Object deserializedObject = om.readValue(o.getJsonData(), clazz);
}
请注意,如果您重命名/移动它们(通过迁移脚本),您将需要在数据库中同步 class 名称。