JAXB 注解列表
Annotation | 范围 | 描述 |
---|---|---|
@XmlRootElement | 类,枚举 | 定义 XML 根元素。根 Java 类在创建时需要在 JAXB 上下文中注册。 |
@XmlAccessorType | 包、类 | 定义 JAXB 引擎用于绑定的 Java 类的字段和属性。它有四个值:PUBLIC_MEMBER 、FIELD 、PROPERTY 和NONE 。 |
@XmlAccessorOrder | 包、类 | 定义子项的顺序。 |
@XmlType | 类,枚举 | 将 Java 类映射到模式类型。它定义了其子项的类型名称和顺序。 |
@XmlElement | 场地 | 将字段或者属性映射到 XML 元素 |
@XmlAttribute | 场地 | 将字段或者属性映射到 XML 属性 |
@XmlTransient | 场地 | 防止将字段或者属性映射到 XML 架构 |
@XmlValue | 场地 | 将字段或者属性映射到 XML 标记上的文本值。 |
@XmlList | 字段、参数 | 将集合映射到由空格分隔的值列表。 |
@XmlElementWrapper | 场地 | 将 Java 集合映射到 XML 包装的集合 |
@XmlRootElement
这将类或者枚举类型映射到 XML 根元素。
当顶级类或者枚举类型使用 @XmlRootElement
批注进行批注时,其值在 XML 文档中表示为 XML 元素。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.PROPERTY) public class Employee implements Serializable { //More code }
以上将导致:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <employee> //.... </employee>
@XmlAccessorType
它定义了 JAXB 引擎用于包含到生成的 XML 中的 Java 类的字段或者属性。
它有四个可能的值。
FIELD
- JAXB 绑定类中的每个非静态、非瞬态字段都将自动绑定到 XML,除非由XmlTransient
注释。NONE
- 没有任何字段或者属性绑定到 XML,除非它们被一些 JAXB 注释专门注释。PROPERTY
- JAXB 绑定类中的每个 getter/setter 对都将自动绑定到 XML,除非由XmlTransient
注释。PUBLIC_MEMBER
- 每个公共 getter/setter 对和每个公共字段都将自动绑定到 XML,除非由XmlTransient
注释。- 默认值为
PUBLIC_MEMBER
。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { private Integer id; private String firstName; private String lastName; }
以上将导致:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <employee> <firstName>JackLi</firstName> <id>1</id> <lastName>Gupta</lastName> </employee>
@XmlAccessorOrder
控制类中字段和属性的顺序。
我们可以使用预定义的值 ALPHABETICAL
或者 UNDEFINED
。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { private Integer id; private String firstName; private String lastName; private Department department; }
以上将导致:
<?xml version="1.0" encoding="UTF-8"?> <employee> <department> <id>101</id> <name>IT</name> </department> <firstName>JackLi</firstName> <id>1</id> <lastName>Gupta</lastName> </employee>
@XmlType
它将 Java 类或者枚举类型映射到模式类型。
它定义了其子项的类型名称、命名空间和顺序。
它用于将模式中的元素与模型中的元素进行匹配。
@XmlRootElement(name = "employee") @XmlType(propOrder={"id", "firstName" , "lastName", "department" }) public class Employee implements Serializable { private Integer id; private String firstName; private String lastName; private Department department; }
@XmlElement
将 JavaBean 属性映射到从属性名称派生的 XML 元素。
@XmlRootElement(name = "employee") public class Employee implements Serializable { @XmlElement(name=employeeId) private Integer id; @XmlElement private String firstName; private String lastName; private Department department; }
以上将导致:
<?xml version="1.0" encoding="UTF-8"?> <employee> <employeeId>1</employeeId> <firstName>JackLi</firstName> </employee>
@XmlAttribute
将 JavaBean 属性映射到 XML 属性。
@XmlRootElement(name = "employee") public class Employee implements Serializable { @XmlAttribute private Integer id; private String firstName; private String lastName; private Department department; }
以上将导致:
<?xml version="1.0" encoding="UTF-8"?> <employee id="1"> <department> <id>101</id> <name>IT</name> </department> <firstName>JackLi</firstName> <lastName>Gupta</lastName> </employee>
@XmlTransient
防止将 JavaBean 属性/类型映射到 XML 表示。
当放在一个类上时,它表明该类不应该自己映射到 XML。
此类类的属性将与其派生类一起映射到 XML,就好像该类是内联的一样。
@XmlTransient
与所有其他 JAXB 定义的注解是互斥的。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { @XmlTransient private Integer id; private String firstName; private String lastName; private Department department; }
以上将导致:
<?xml version="1.0" encoding="UTF-8"?> <employee> <firstName>JackLi</firstName> <lastName>Gupta</lastName> <department> <id>101</id> <name>IT</name> </department> </employee>
@XmlValue
允许将类映射到具有 simpleContent 或者 XML Schema 简单类型的 XML Schema 复杂类型。
它与模式映射到模型映射更相关。
@XmlList
用于将属性映射到列表简单类型。
它允许在单个元素中将多个值表示为以空格分隔的标记。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { private List<String> hobbies; } // <?xml version="1.0" encoding="UTF-8"?> <employee> <hobbies>Swimming</hobbies> <hobbies>Playing</hobbies> <hobbies>Karate</hobbies> </employee>
使用 @XmlList
后,观察输出。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { @XmlList private List<String> hobbies; } // <?xml version="1.0" encoding="UTF-8"?> <employee> <hobbies>Swimming Playing Karate</hobbies> </employee>
]
@XmlElementWrapper
围绕 XML 表示生成包装器元素。
这主要用于围绕集合生成包装器 XML 元素。
因此,它必须与集合属性一起使用。
@XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { @XmlElementWrapper(name="hobbies") @XmlElement(name="hobby") private List<String> hobbies; }
以上将导致:
<?xml version="1.0" encoding="UTF-8"?> <employee> <hobbies> <hobby>Swimming</hobby> <hobby>Playing</hobby> <hobby>Karate</hobby> </hobbies> </employee>
on it road.com
JAXB注解示例
学习在模型类上应用 JAXB 注释,然后将对象编组到 XML 文件中。
package com.onitroad.demo.model; import java.io.Serializable; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "employee") @XmlAccessorType(XmlAccessType.FIELD) public class Employee implements Serializable { private static final long serialVersionUID = 1L; private Integer id; private String firstName; private String lastName; private Department department; @XmlElementWrapper(name="hobbies") @XmlElement(name="hobby") private List<String> hobbies; public Employee() { super(); } public Employee(int id, String fName, String lName, Department department) { super(); this.id = id; this.firstName = fName; this.lastName = lName; this.department = department; } //Setters and Getters }
package com.onitroad.demo; import java.io.File; import java.util.Arrays; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import com.onitroad.demo.model.Department; import com.onitroad.demo.model.Employee; public class JaxbExample { public static void main(String[] args) { Employee employee = new Employee(1, "JackLi", "Gupta", new Department(101, "IT")); employee.setHobbies(Arrays.asList("Swimming","Playing", "Karate")); jaxbObjectToXML(employee); } private static void jaxbObjectToXML(Employee employee) { try { JAXBContext jaxbContext = JAXBContext.newInstance(Employee.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); // To format XML //Print XML String to Console jaxbMarshaller.marshal(employee, new File("employee.xml")); } catch (JAXBException e) { e.printStackTrace(); } } }
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <employee> <id>1</id> <firstName>JackLi</firstName> <lastName>Gupta</lastName> <department> <id>101</id> <name>IT</name> </department> <hobbies> <hobby>Swimming</hobby> <hobby>Playing</hobby> <hobby>Karate</hobby> </hobbies> </employee>
日期:2020-09-17 00:09:40 来源:oir作者:oir