利用JAXB实现xml和bean之间的转换(一)

本文介绍了如何使用JAXB结合Jackson库进行XML和Java Bean之间的转换。JAXBContext作为应用入口,管理绑定信息;Marshaller和Unmarshaller分别用于序列化和反序列化。关键注解包括@XmlRootElement、@XmlElement、@XmlAttribute等。文章通过一个XML目录结构示例,展示了Java Bean的设计,并强调了注解的正确位置。最后,文章提及了XML转Bean和Bean转XML的流程,但XML转Bean的具体实现留待后续讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。

JDK中JAXB相关的重要Class和Interface:

JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。

Marshaller接口,将Java对象序列化为XML数据。

Unmarshaller接口,将XML数据反序列化为Java对象。

JDK中JAXB相关的重要Annotation:

一般用到的就几个:

@XmlRootElement:表示映射到根目录标签元素

@XmlElement:表示映射到子元素

@XmlAttribute:表示映射到属性

@XmlElementWrapper :表示类型是集合元素的子元素的上层目录

要把实现相互转换,首先你得根据目录结构设计类对象

比如xml中有一下目录:

<A>
    <B></B>
    <C c=".."></C>
    <D>
        <E e="...">
            <F></F>
            <G>
                <H></H>
            </G>
            <G>
                <H></H>
                <M></M>
            </G>
            <G>
                <H></H>
                <M></M>
            </G>
            <G>
                <H></H>
                <M></M>
            </G>
        </E>
    </D>
</A>

那么Java Bean 有ClassA、ClaccC、ClassD、ClassE、ClassG5个类

对于JAXB相关的重要Annotation的声明,如@Xml.....,可以放在成员变量的setter()getter()方法上,两者中任选其一即可,但决不能放在成员变量上,否则运行将抛出异常com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException。

ClassA

@XmlRootElement(name = "A")
Class ClassA{
   private Object b;
   private C c;
   private D d;

@XmlElement(name = "B")
getB();
setB();

@XmlElement(name = "C")
getC();
setC();

@XmlElement(name = "D")
getD();
setD();

}

ClassC

@XmlRootElement(name = "C")
Class ClassC{
   private Object c;

@XmlAttribute(name = "c")
getC();
setC();
}
ClassD

@@XmlRootElement(name = "D")
Class ClassD{
   private E e;

@XmlElement(name = "E")
getE();
setE();

}

ClassE

@@XmlRootElement(name = "E")
Class ClassE{
   private Object e;
   private Object f;
   private G g;

@XmlAttribute(name = "e")
getE();
setE();

@XmlElement(name = "F")
getF();
setF();

@XmlElement(name = "G")
getG();
setG();

}

ClassG

@XmlRootElement(name = "G")
Class ClassG{
   private Object h;
   private Object m;

@XmlAttribute(name = "H")
getH();
setH();

@XmlAttribute(name = "M")
getM();
setM();
}

下面介绍如何将xml文件转换为Bean

public static void main(String[] args) {
        //xml转换成bean
        try {
            File file = new File("C:\\file1.xml");
            JAXBContext jaxbContext = JAXBContext.newInstance(A.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            A a = (A) jaxbUnmarshaller.unmarshal(file);
            System.out.println(fox.toString());
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }
如果xml文件中有中文,记得把编码方式从UTF-8变为GBK


将bean转换为xml

这个之后再来说






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值