运用泛型实现复杂对象与 XML 的互转

前端之家收集整理的这篇文章主要介绍了运用泛型实现复杂对象与 XML 的互转前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在之前的一篇文章中,我们使用常规方法实现看 Java Bena 与 XML 之间的相互转化,本文将使用泛型,两文对比可以看出泛型的优势——代码复用。

上一篇文章

XML报文转JAVA对象-JAVA对象转XML报文

介绍一下 JAXB-看红字即可

JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。JAXB允许JAVA人员将JAVA类映射为XML表示方式,常用的注解包括:@XmlRootElement,@XmlElement等等。
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。(选自百度百科 https://baike.baidu.com/item/JAXB/479341?fr=aladdin)

基本的注解含义

https://blog.csdn.net/bestcxx/article/details/79203756
定位到@XmlRootElement(name=”date”)

泛型方法工具类

泛型(四)-泛型应用之XML和实体类型的转化

测试需要三个实体

我们需要三个实体,一个是班级,一个是学生,还有一个中间节点。一个班级有多个学生这样,如果你的 XML 报文比较复杂,只需要为每一个节点创建一个实体,实体关系满足 XML 节点的关系即可完成复杂 XML 与 Java Bean 的相互转化。本文测试的 XML 结构为 < Myclass>< List>< MyStudent>

@H_301_2@
  • 学生类
  • package com.bestcxx.stu.bean;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlRootElement;
    
    
    @XmlRootElement(name="student")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class MyStudent {
        private String name;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "MyStudent [name=" + name + ",age=" + age + "]";
        }
    }
    @H_301_2@
  • List 节点类
  • package com.bestcxx.stu.bean;
    
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement
    @XmlAccessorType(XmlAccessType.FIELD)
    public class MyList {
    
        @XmlElement(name="list自定义")
        private List<MyStudent> list;
    
        public List<MyStudent> getList() {
            return list;
        }
    
        public void setList(List<MyStudent> list) {
            this.list = list;
        }
    
        @Override
        public String toString() {
            return "MyList [list=" + list + "]";
        }
    }
    @H_301_2@
  • 班级类
  • package com.bestcxx.stu.bean;
    
    
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    
    @XmlRootElement(name="date")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class MyClass {
        private String className;
    
        @XmlElement(name="mylist自定义")
        private MyList mylist;
    
        public String getClassName() {
            return className;
        }
    
        public void setClassName(String className) {
            this.className = className;
        }
    
    
        public MyList getMylist() {
            return mylist;
        }
    
        public void setMylist(MyList mylist) {
            this.mylist = mylist;
        }
    
        @Override
        public String toString() {
            return "MyClass [className=" + className + ",mylist=" + mylist + "]";
        }
    
    }
    测试方法
    package com.bestcxx.stu.util;
    
    import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    
    import javax.xml.bind.JAXBException;
    
    import org.junit.Test;
    
    import com.bestcxx.stu.bean.MyClass;
    import com.bestcxx.stu.bean.MyList;
    import com.bestcxx.stu.bean.MyStudent;
    
    public class XmlBeanUtilTest {
    
        //提供参数组织的方法
        public MyClass getMyClass(){
            MyClass m1=new MyClass();
            m1.setClassName("一班");
    
            MyStudent m21=new MyStudent();
            m21.setAge(20);
            m21.setName("jecket");
    
            MyStudent m22=new MyStudent();
            m22.setAge(21);
            m22.setName("jecket2");
    
            List<MyStudent> list=new ArrayList<MyStudent>();
    
            list.add(m21);
            list.add(m22);
    
            MyList ml=new MyList();
            ml.setList(list);
    
            m1.setMylist(ml);
            return m1;
        }
    
        //Java Bean 转 XML
        @Test
        public void testBeanToXmlEncoding(){
            //为了清晰表述,我们把参数组织单独列为一个方法
            MyClass m1=getMyClass();
            String xml="";
            try {
                xml=XmlBeanUtil.BeanToXmlEncoding(m1,"GBK");
            } catch (JAXBException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("Java Bean 转 XML="+xml);
    
        }
    
        //XML 转 Java Bean
        @Test
        public void testXmlToBeanEncoding(){
            //为了清晰表述,我们把参数组织单独列为一个方法
            MyClass m1=null;
            String xml="<?xml version=\"1.0\" encoding=\"GBK\" standalone=\"yes\"?>"
                    + "<date>"
                    + "<className>一班</className>"
                    + " <mylist自定义>"
                    + "<list自定义>"
                    + "<name>jecket</name>"
                    + "<age>20</age>"
                    + "</list自定义>"
                    + "<list自定义>"
                    + " <name>jecket2</name>"
                    + "<age>21</age>"
                    + " </list自定义>"
                    + "</mylist自定义>"
                    + "</date>";
    
    
                    try {
                        m1=XmlBeanUtil.XmlToBeanEncoding(xml,MyClass.class,"GBK");
                    } catch (UnsupportedEncodingException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (JAXBException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
    
            System.out.println("XML 转 Java Bean ="+m1.toString());
    
        }
    
    }
    测试结果
    Java Bean 转 XML=<?xml version="1.0" encoding="GBK" standalone="yes"?>
    <date>
        <className>一班</className>
        <mylist自定义>
            <list自定义>
                <name>jecket</name>
                <age>20</age>
            </list自定义>
            <list自定义>
                <name>jecket2</name>
                <age>21</age>
            </list自定义>
        </mylist自定义>
    </date>
    XML 转 Java Bean =MyClass [className=一班,mylist=MyList [list=[MyStudent [name=jecket,age=20],MyStudent [name=jecket2,age=21]]]]

    猜你在找的XML相关文章