zoukankan      html  css  js  c++  java
  • @XmlAccessorType @XmlType 详解

    例子:

    @XmlAccessorType(XmlAccessType.FIELD)

      String name=”CY”;
    }

     

      public static void main(String[] args){
        JAXBContent context = JAXBContent.newInstance(Boy.class);

        Marsheller marsheller = context.createMarsheller();

        UnMarsheller unmarsheller = context.createUnMarsheller();

       

        Boy boy = new Boy();

        marsheller.marshel(boy,System.out);

        System.out.println();

     

        String xml=”<boy><name>David</name></boy>”;

        Boy boy2 = (Boy)unmarsheller.unmarshel(new StringReader(xml));

        System.out.println(boy2.name);

      }

     

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
    David
    先是marshall成 xml文件,

     

    @XmlAccessorType(XmlAccessType.FIELD)  --> @XmlAccessorType(XmlAccessType.PROPERTY)

    所以再运行的结果是:

    CY

    -----------------------------------------------------

    在 改动一 的基础上,给name属性添加 get set 方法。 再运行,结果为:

    David
    由此 可见 @XmlAccessorType 这个annotation 的作用。

     

     

    @XmlRootElement 
    @XmlAccessorType(XmlAccessType.PROPERTY)
    public class Boy {    
        String name = "CY";
         int age = 10;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

     

     

    @XmlRootElement // bixude 
    @XmlAccessorType(XmlAccessType.PROPERTY)
    public class Boy {
        String name = "CY";
        @XmlElement
         int age = 10;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

     

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><age>10</age> <name>CY</name></boy>
    David

    对于根元素,可以设置属性:

    这样,在生成的xml文件中,<boy> 标签 就会变为 <b> 标签。并且加上一个命名空间。

    下面解释 @XmlJavaTypeAdaptor 的作用。

     

        private Address address; // 是一个接口
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

    所以 这里要加上 @XmlJavaTypeAdapter(AddressAdapter.class)

    这个类会返回Address接口的一个具体实现类的对象。

    这 就是 @XmlJavaTypeAdapter 的作用

     

    @XmlType

    默认情况下,Jaxb编组出来的xml中的字段顺序是随机的,你可以使用@XmlType的propOrder属性
    来指定序列化的顺序。
     
    定义java类时,使用@XmlType(propOrder = { "id", "name", "age","book"})指定输出顺序。
     
        package step2;  
        import java.util.Set;  
          
        import javax.xml.bind.annotation.XmlElement;  
        import javax.xml.bind.annotation.XmlElementWrapper;  
        import javax.xml.bind.annotation.XmlRootElement;  
        import javax.xml.bind.annotation.XmlType;  
          
        @XmlRootElement  
        @XmlType(propOrder = { "id", "name", "age","book"})  
        public class Customer {  
            String name;  
            int age;  
            int id;  
            Set<Book> book;  
            @XmlElement(name="name")  
            public String getName() {  
                return name;  
            }  
          
            public void setName(String name) {  
                this.name = name;  
            }  
          
            @XmlElement(name="age")  
            public int getAge() {  
                return age;  
            }  
          
            public void setAge(int age) {  
                this.age = age;  
            }  
            @XmlElement(name="id")  
            public int getId() {  
                return id;  
            }  
          
            public void setId(int id) {  
                this.id = id;  
            }  
          
              
            @Override  
            public String toString() {  
                return "Customer [id=" + id + ",name=" + name + ",age=" + age + ",book=" + book + "]";  
            }  
            @XmlElementWrapper(name="books")  
            @XmlElement(name="book")  
            public Set<Book> getBook() {  
                return book;  
            }  
          
            public void setBook(Set<Book> book) {  
                this.book = book;  
            }  
          
              
        }  
    输出的xml:
     
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>  
        <customer>  
            <id>100</id>  
            <name>suo</name>  
            <age>29</age>  
            <books>  
                <book>  
                    <id>1</id>  
                    <name>哈里波特</name>  
                    <price>100.0</price>  
                </book>  
                <book>  
                    <id>2</id>  
                    <name>苹果</name>  
                    <price>50.0</price>  
                </book>  
            </books>  
        </customer>  
    注:
    1.对于@XmlElementWrapper标注的属性,不能出现在@XmlType的propOrder列表中。
    2.对于所有@XmlElement标注过的属性,必须出现在@XmlType的propOrder列表中。
  • 相关阅读:
    Iframe和Frame中实现cookie跨域的方法(转载)
    android中拷贝assets下的资源文件到SD卡中(可以超过1M)
    OpenSL ES 查询设备支持的SL Profiles
    NDK开发中的一个HTTP下载实例附带下载进度
    android中配置文件property的用途以及使用<转>
    Eclipse 工程使用相对路径导入Jar包设置
    Android 解压zip文件(支持中文)
    c++实现一个比较两个string类型的版本号的小demo
    linux c++下载http文件并显示进度<转>
    Linux下类似windows下_beginthread和_endthread 的多线程开发
  • 原文地址:https://www.cnblogs.com/liaojie970/p/4796903.html
Copyright © 2011-2022 走看看