特点
1. 一次性生成xml文件
2. 元素无命名空间会将ns作为命名空间
在元素所在包内添加package-info.java文件
@javax.xml.bind.annotation.XmlSchema(namespace = "http://sxbw.audit.gov.cn/AccountingSoftwareDataInterfaceStandard/010/PSGA/XMLSchema"
, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package cn.window.xml.pojo;

3. Date类型字段需要使用Adapter进行转换
使用@XmlJavaTypeAdapter指定适配器,必须添加在get方法上
4. 使用XmlAccessType.PROPERTY需要手动指定顺序@XmlType.propOrder
@XmlType(propOrder = {"属性名1", "属性名2", ... , "属性名N"})
// Person.java
@Data
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "人类")
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(propOrder = {"age", "id", "name", "birthDay"})
public class Person {
private String id;
private String name;
private Integer age;
private Date birthDay;
@XmlElement(name = "ID")
public String getId() {
return id;
}
@XmlElement(name = "名字")
public String getName() {
return name;
}
@XmlElement(name = "年龄")
public Integer getAge() {
return age;
}
@XmlElement(name = "生日")
@XmlJavaTypeAdapter(JaxbDateAdapter.class)
public Date getBirthDay() {
return birthDay;
}
}
/**
* jaxb日期格式化适配器
*/
public class JaxbDateAdapter extends XmlAdapter<String, Date> {
// 日期需要转换的类型
static final String DATE_FORMAT = "yyyyMMdd";
@Override
public Date unmarshal(String date) throws Exception {
if (date == null) {
return null;
}
DateFormat format = new SimpleDateFormat(DATE_FORMAT);
return format.parse(date);
}
@Override
public String marshal(Date date) throws Exception {
DateFormat format = new SimpleDateFormat(DATE_FORMAT);
return format.format(date);
}
}
<?xml version="1.0" encoding="GB18030" standalone="yes"?>
<人类 xmlns="http://sxbw.audit.gov.cn/AccountingSoftwareDataInterfaceStandard/010/PSGA/XMLSchema">
<年龄>18</年龄>
<ID>1</ID>
<名字>张三</名字>
<生日>20210823</生日>
</人类>
本文详细介绍了Java中JAXB库用于XML序列化和反序列化的配置方法,包括一次性生成XML文件、处理无命名空间元素、Date类型字段的适配转换以及属性顺序的指定。通过示例代码展示了如何使用@XmlSchema、@XmlJavaTypeAdapter和@XmlType注解进行配置,并给出了XML示例。

7741

被折叠的 条评论
为什么被折叠?



