我正在编写服务来在我们的应用程序中实现审核,其中用户可以在任何修改之前和之后查看特定实体的状态,并且还应该能够将其回滚。我们决定将 XML 序列化对象存储在数据库中的 XML_TYPE 列中。
我是序列化新手,我不知道如何实现相同的效果,需要对要序列化的对象进行任何更改,或者我们是否需要任何映射 XML。有人可以推荐一些好的库吗,我知道市场上有很多可用的库,例如 JAXB、JIBX、JABX、XStream 等。哪个好以及如何使用它。
非常感谢任何帮助。
问候, 拉维。
最佳答案
当然,对于实体来说最好的是拥有 POJO(普通旧 Java 对象)。没有奇怪的属性、引用或方法。它简化了序列化,并使模型对象与框架和奇怪的层(如持久性、UI、远程访问等)保持中立。
XStream:简单
我建议使用 XStream 库进行序列化。它试图成为将对象序列化和反序列化为 XML 的最简单方法。
你应该这样思考序列化:
- 指出该对象是什么类
- 尝试序列化每个属性
所以,这是序列化中要解决的两个问题。 XStream 允许您创建序列化程序(XStream 类),(可选)指示每个类使用什么标记名称,并且(可选)指示属性的别名。
所以如果你有类似的东西:
package pack;
Person
+ mom: Person
+ dad: Person
它将在没有配置的情况下写入:
<pack.Person>
<mom>
<pack.Person>
...
</pack.Person>
</mom>
<dad>
<pack.Person>
...
</pack.Person>
</dad>
</pack.Person>
但是如果你告诉它映射 package.Person 到它将会使用该标签。你可以告诉它把属性“mom”写成“mother”等等。
XStream xs = new XStream();
xs.alias("person", Person.class);
xs.aliasAttribute(Person.class, "mom", "mother");
引用文献
XStream 还可以让您指出您想要的引用类型:
- 无引用:序列化对象 每次它在对象中找到它时 树
- 绝对引用:第二次 找到一个对象,它保存一个 使用绝对路径引用 第一个实例 (/人/人[4]/老师)
- 相对引用:相同,但是 使用来自 this 的相对引用 点(../../人[4]/老师)
关于java - Java 中对象 XML 序列化的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973829/