摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录
@XmlRootElement
类级别的注解。将类映射为xml全局元素,也就是根元素。如果要使用 JAXB ,则该注解必不可少。
@XmlRootElement
public class Student {
private String name;
...
}
生成的XML如下:
<student>
<name>Tom</name>
...
</student>
参数 name
name属性用于指定生成元素的名字,若不指定,默认使用类名小写作为元素名。
@XmlRootElement(name = "MyStudent")
public class Student {
private String name;
...
}
生成的XML如下:
<MyStudent>
<name>Tom</name>
...
</MyStudent>
参数 namespace
namespace属性用于指定生成的元素所属的命名空间。
@XmlType
参数 name
定义XML Schema中type的名称
参数 namespace
指定Schema中的命名空间
参数 propOrder
指定映射XML时的节点顺序
参数 factoryClass
指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身
参数 factoryMethod
指定工厂类的工厂方法
@XmlAccessorType
类级别的注解。定义这个类中的何种类型需要映射到XML。
参数 value
参数 value 可以接受4个指定值:
- XmlAccessType.FIELD:映射这个类中的所有字段到XML
- XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
- XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
- XmlAccessType.NONE:不映射
@XmlAccessorOrder
@XmlElement
字段,方法,参数级别的注解。该注解可以将被注解的(非静态)字段,或者被注解的get/set方法对应的字段映射为本地元素,也就是子元素。
参数 name
用于指定映射时的节点名称,指定生成元素的名字,若不指定,默认使用方法名小写作为元素名。
参数 namespace
指定映射时的节点命名空间
参数 required
字段是否必须,默认为false
参数 nillable
是否处理空数据,默认为false
参数 type
定义该字段或属性的关联类型
@XmlAttribute
参数 name
用于指定映射时的节点属性名称,若不指定,默认使用方法名小写作为元素名。
参数 namespace
指定映射时的节点属性命名空间
参数 required
该属性是否必须,默认为false
@XmlTransient
定义某一字段或属性不需要被映射。
@XmlElementWrapper
为数组元素或集合元素定义一个父节点。
@XmlJavaTypeAdapter
自定义某一字段或属性映射到XML的适配器。
常见忽视点
一般不要把成员变量声明为public。可能会抛出异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException
List元素需要使用@XmlElementWrapper
,负责外围解析可能不正常。