接上篇继续梳理JAXB标签的使用
JDK中JAXB相关的重要Annotation:
@XmlRootElement,将Java类或枚举类型映射到XML元素。(生成的xml根节点,默认是class名)
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
//证件号
@XmlElement(name="SFID",required =true)
int id;
//姓名
@XmlElement(name="NAME",required =true)
String name;
//性别
@XmlElement(name="sex",required =true)
boolean sex;
//年龄
@XmlElement(name="age",required =false)
int age;
运行结果:
刘阿姨
0
29
false
@XmlType,将Java类或枚举类型映射到XML模式类型(可以指定xml各个字段的顺序)常与@XmlRootElement,@XmlAccessorType一起使用。它有三个属性:name、propOrder、namespace,经常使用的只有前两个属性。如:
name
属性在你不想使用class名的时候,来指定XML Schema中的名字。namespace
属性用来指定目标namespace的名字。propOrder
的值是一个字符串数组,用来设置子elements的顺序@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Person")
@XmlType(name="PersonRequest",propOrder = {
"name",
"id",
"age",
"sex"
})
public class Person{
//证件号
@XmlElement(name="id",required =true)
int id;
//姓名
@XmlElement(name="name",required =true)
String name;
//性别
@XmlElement(name="sex",required =true)
boolean sex;
//年龄
@XmlElement(name="age",required =true)
int age;
转换结果:
刘阿姨
0
29
false
我用的jdk1.8 xmltype的name属性没有生效
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。(放在class上边和@XmlRootElement)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
@XmlType(name="PersonRequest",propOrder = {
"name",
"id",
"age",
"sex",
"name"
})
@XmlAccessorOrder()
public class Person{。。。。
运行结果:
1
aaaa
false
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。@XmlElementWrapper(name="CardNos") @XmlElement(name="Card") String[] cardno; 运行结果:
1 aaaa false 11111 22222 33333
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
//证件号
@XmlElement(name="SFID",required =true)
int id;
//姓名
@XmlElement(name="NAME",required =true)
String name;
//性别
@XmlElement(name="sex",required =true)
boolean sex;
//年龄
@XmlAttribute
int age;
运行结果:
aaaa
1
false
测试完最后的javabean如下:
package com.bean;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorOrder;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
@XmlType(name="PersonRequest",propOrder = {
"name",
"id",
"age",
"sex",
"name"
})
@XmlAccessorOrder()
public class Person{
//证件号
@XmlElement(name="SFID",required =true)
int id;
//姓名
@XmlElement(name="NAME",required =true)
String name;
//性别
@XmlElement(name="sex",required =true)
boolean sex;
//年龄
@XmlAttribute
int age;
//卡号集
@XmlElementWrapper(name="CardNos")
@XmlElement(name="Card")
String[] cardno;
public String[] getCardno() {
return cardno;
}
public void setCardno(String[] cardno) {
this.cardno = cardno;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(int id, String name, boolean sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
参考:https://www.cnblogs.com/qiyebao/p/4573665.html
https://blog.csdn.net/qq_29171935/article/details/88550045