JAXB注解
1. @XmlRootElement
是类级别注解.将类映射为xml全局元素,也叫根元素.如果要使用JAXB,此注解必不可少.
此注解通过设置name属性的值来设置xml的全局元素:
@XmlRootElement(name = "uuu")
public class User {
private Integer id;
private String name;
private Integer age;
......此实体类的get/set方法
}
<uuu>
<age>18</age>
<id>1</id>
<name>lili</name>
</uuu>
此注解不设置name属性则默认使用类名小写作为元素名:
@XmlRootElement
public class User {
private Integer id;
private String name;
private Integer age;
......此实体类的get/set方法
}
<user>
<age>18</age>
<id>1</id>
<name>lili</name>
</user>
参数:namespace
namespace属性用于指定生成的元素所属的命名空间
@XmlRootElement(namespace = "ddd")
public class User {
private Integer id;
private String name;
private Integer age;
......此实体类的get/set方法
}
<ns2:user xmlns:ns2="ddd">
<age>18</age>
<id>1</id>
<name>lili</name>
</ns2:user>
2.@XmlType 类级别的注解
参数 name定义XML Schema中type的名称
参数 namespace指定Schema中的命名空间
参数 propOrder指定映射XML时的节点顺序,使用该属性时,必须列出JavaBean对象中的所有字段,否则会报错
@XmlRootElement
@XmlType(propOrder = {"id","name","age"})
public class User {
private Integer id;
private String name;
private Integer age;
......此实体类的get/set方法
}
<user>
<id>1</id>
<name>lili</name>
<age>18</age>
</user>
参数 factoryClass指定UnMarshal时生成映射类实例所需的工厂类,默认为这个类本身
参数 factoryMethod指定工厂类的工厂方法
3.@XmlAccessorType
类级别的注解.定义这个类中的何种类型需要映射到XML,可以通过它的属性值更好理解这个参数的意义
参数 value 可以接受4个指定值,这几个值是枚举类型,方便调用:
XmlAccessType.FIELD:映射这个类中的所有字段到XML
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User {
private Integer id;
private String name;
private Integer age;
......此实体类的get/set方法
}
<user>
<id>1</id>
<name>lili</name>
<age>18</age>
</user>
XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
XmlAccessType.NONE:不映射
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class User {
private Integer id;
private String name;
private Integer age;
......此实体类的get/set方法
}
<user/>
4.@XmlElement
字段,方法,参数级别的注解.该注解可以将被注解的(非静态)字段或者被注解的get/set方法对应的字段映射为本地元素,也就是子元素
参数 name 用于指定映射时的节点名称,指定生成元素的名字,若不指定,默认使用方法名小写作为元素名
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Person {
@XmlElement(name = "Id", required = true)
private Integer id;
@XmlElement(name = "Name", required = true)
private String name;
@XmlElement(name = "Age", required = true)
private Integer age;
......此实体类的get/set方法
}
<person>
<Id>2</Id>
<Name>lucy</Name>
<Age>19</Age>
</person>
此处需要注意一下使用@XmlElement注解时要配合@XmlAccessorType注解使用,否则有可能报下面异常:
参数 namespace 指定映射时的节点命名空间
参数 required 字段是否必须,默认为false
参数 nillable 是否处理空数据,默认为false
参数 type 定义该字段或属性的关联类型