通过前面几章的学习我们已经掌握了,手动为 Java Bean 添加注解与简单的 XML 进行相互转换;接下来,探讨多种关联关系在 JAXB 中的实现
JAXB 支持 Java 对象树与 XML 文档相互转换,有如下几种场景:
这个对象和我们常见的Java对象唯一的不同就是在普通的Java类上添加了注解 @XmlRootElement,默认类的属性(get/set)会被识别成 XML 节点元素通过添加 @XmlAttribute 注解,将属性識别成该类节点的属性值
这里演示了最基本的Java 对象和XML相互转换的过程。使用 JAXB 不需要引入第三方依赖jar包在控制台可以看到如下输出。
Order对象中包含Product对象这在项目中是常见情形。Order 对象无需进行特殊的配置JAXB 能够对 Order 对象嵌套的 Cashier 对象进行解析。
Order对象的第三个属性是个复杂的数据类型
编写测试单元进行测试;
生成的XML含有两个层级。
Java 对象中含有 List可以采取如下几种方式:
泛型 List 集合类型,可以使用基本数据类型也可以使用自定义类型;在 XML 的转换中,基礎数据类型如 String, Integer, Double, Decimal 等,会被直接当做 XML 的节点内容而自定义类型,会被按照对象树进行 XML 的转换接下来,我们就这两种类型来了解 JAXB 支持的 List 集合处理。
1、采用默认配置处理 List 集合
JABX默认支持 List 对象的解析无需特别声明即可生成 List 对象的 XML。
处理基础数据类型的 List 集合 商品信息中的有很多尛项所以使用List类型。
每一个小项都更加复杂
处理基础数据类型的 List 集合 如果想让生成的XML外围被包裹起来,可以加上注解 @XmlElementWrapper
处理类对象的 List 集合
处理基础数据类型的 List 集合 注解 @XmlValue 只用于类对象。
处理类对象的 List 集合
商品信息中的小项还含有属性
每一个小项都更加复杂,注意这里的 name 使用的注解@XmlValue
通过 @XmlValue 注解,将类对象的某一字段/属性标识为节点内容
处理基础数据类型的 List 集合 在JAXB 中,有一个注解 @XmlList主要是为了在一个XML的Element中添加多个值
可以看到,item包含了List中的所有数据
处理类对象的 List 集合
改造需要的代码量比较多,因为JAXB原生不指定Map的自定义操作也可以说JAXB不支歭Map这种数据类型。所以需要使用到适配器来扩展 JAXB 的功能
首先定义一个类,其中只有两个字段为了简单,可以不写setters/getters方法通过这种方式模拟一个Map,只包含key/value,也就是first/second这个名称就是XML的节点显示名称。
自定义一个Adapter这里将所有的代码都展示出来。
上面的所有节点名称除了item都是可以通过一定的方法改变嘚。