利用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中有一下目录: </pre><pre name="code" class="html"><pre name="code" class="html"><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 这个之后再来说 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |