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

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

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中有一下目录:

[html]  view plain  copy
  1. <A>  
  2.     <B></B>  
  3.     <C c=".."></C>  
  4.     <D>  
  5.         <E e="...">  
  6.             <F></F>  
  7.             <G>  
  8.                 <H></H>  
  9.             </G>  
  10.             <G>  
  11.                 <H></H>  
  12.                 <M></M>  
  13.             </G>  
  14.             <G>  
  15.                 <H></H>  
  16.                 <M></M>  
  17.             </G>  
  18.             <G>  
  19.                 <H></H>  
  20.                 <M></M>  
  21.             </G>  
  22.         </E>  
  23.     </D>  
  24. </A>  

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

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

ClassA

[java]  view plain  copy
  1. @XmlRootElement(name = "A")  
  2. Class ClassA{  
  3.    private Object b;  
  4.    private C c;  
  5.    private D d;  
  6.   
  7. @XmlElement(name = "B")  
  8. getB();  
  9. setB();  
  10.   
  11. @XmlElement(name = "C")  
  12. getC();  
  13. setC();  
  14.   
  15. @XmlElement(name = "D")  
  16. getD();  
  17. setD();  
  18.   
  19. }  

ClassC

[java]  view plain  copy
  1. @XmlRootElement(name = "C")  
  2. Class ClassC{  
  3.    private Object c;  
  4.   
  5. @XmlAttribute(name = "c")  
  6. getC();  
  7. setC();  
  8. }  
ClassD

[java]  view plain  copy
  1. @@XmlRootElement(name = "D")  
  2. Class ClassD{  
  3.    private E e;  
  4.   
  5. @XmlElement(name = "E")  
  6. getE();  
  7. setE();  
  8.   
  9. }  

ClassE

[java]  view plain  copy
  1. @@XmlRootElement(name = "E")  
  2. Class ClassE{  
  3.    private Object e;  
  4.    private Object f;  
  5.    private G g;  
  6.   
  7. @XmlAttribute(name = "e")  
  8. getE();  
  9. setE();  
  10.   
  11. @XmlElement(name = "F")  
  12. getF();  
  13. setF();  
  14.   
  15. @XmlElement(name = "G")  
  16. getG();  
  17. setG();  
  18.   
  19. }  

ClassG

[java]  view plain  copy
  1. @XmlRootElement(name = "G")  
  2. Class ClassG{  
  3.    private Object h;  
  4.    private Object m;  
  5.   
  6. @XmlAttribute(name = "H")  
  7. getH();  
  8. setH();  
  9.   
  10. @XmlAttribute(name = "M")  
  11. getM();  
  12. setM();  
  13. }  

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

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


将bean转换为xml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值