如何解决使用ObjectMapper将Json转换为Java对象的最佳方法是什么?
我正在将Java对象转换为Json格式以将它们保存到数据库中。当我从数据库中获得这些Json时,我需要将它们转换为它们来自的对象。为此,我保存了对象的类型,当我从数据库中获取Json时,我使用if子句检查了它们的对象类型,但是我认为这不是存在对象总数的最佳方法。有最简单的方法吗?
数据库表结构:
id | json_data | data_type
--------------------------
1 | "{a:1 ..} | TypeA
--------------------------
2 | so on.......
将Jsons转换为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);
}
请注意,如果您通过迁移脚本重命名/移动它们,则需要同步数据库中的类名。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。