XML导出——JAXB特点

本文详细介绍了Java中JAXB库用于XML序列化和反序列化的配置方法,包括一次性生成XML文件、处理无命名空间元素、Date类型字段的适配转换以及属性顺序的指定。通过示例代码展示了如何使用@XmlSchema、@XmlJavaTypeAdapter和@XmlType注解进行配置,并给出了XML示例。

特点

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</生日>
</人类>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值