<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      JAXB基本使用

      JAXB主要用來實現對象和XML之間的序列化和反序列化,關于JAXB的介紹就不多說了,網上一搜一大把,這里主要總結下基本使用方法和一些注意事項

      首先定義兩個示例類ClassA,ClassB,用于后續的示例演示

      package cn.lzrabbit;
      
      public class ClassA {
          private int classAId;
          private String classAName;
      
          private ClassB classB;
      
          public int getClassAId() {
              return classAId;
          }
      
          public void setClassAId(int classAId) {
              this.classAId = classAId;
          }
      
          public String getClassAName() {
              return classAName;
          }
      
          public void setClassAName(String classAName) {
              this.classAName = classAName;
          }
      
          public ClassB getClassB() {
              return classB;
          }
      
          public void setClassB(ClassB classB) {
              this.classB = classB;
          }
      }
      ClassA
      package cn.lzrabbit;
      
      public class ClassB {
          private int classBId;
          private String classBName;
      
          public int getClassBId() {
              return classBId;
          }
      
          public void setClassBId(int classBId) {
              this.classBId = classBId;
          }
      
          public String getClassBName() {
              return classBName;
          }
      
          public void setClassBName(String classBName) {
              this.classBName = classBName;
          }
      }
      ClassB

      用于序列化的XmlUtil

      package cn.lzrabbit;
      
      import java.io.StringReader;
      import java.io.StringWriter;
      
      import javax.xml.bind.*;
      
      public class XmlUtil {
      
          public static String toXML(Object obj) {
              try {
                  JAXBContext context = JAXBContext.newInstance(obj.getClass());
      
                  Marshaller marshaller = context.createMarshaller();
                  marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// //編碼格式
                  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串
                  marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);// 是否省略xm頭聲明信息
                  StringWriter writer = new StringWriter();
                  marshaller.marshal(obj, writer);
                  return writer.toString();
              } catch (Exception e) {
                  throw new RuntimeException(e);
              }
          }
      
          @SuppressWarnings("unchecked")
          public static <T> T fromXML(String xml, Class<T> valueType) {
              try {
                  JAXBContext context = JAXBContext.newInstance(valueType);
                  Unmarshaller unmarshaller = context.createUnmarshaller();
                  return (T) unmarshaller.unmarshal(new StringReader(xml));
              } catch (Exception e) {
                  throw new RuntimeException(e.getMessage());
              }
          }
      }
      XmlUtil

      調用如下:

      package cn.lzrabbit;
      
      public class MainRun {
      
          /**
           * @param args
           */
          public static void main(String[] args) {
      
              ClassB classB = new ClassB();
              classB.setClassBId(22);
              classB.setClassBName("B2");
      
              ClassA classA = new ClassA();
              classA.setClassAId(11);
              classA.setClassAName("A1");
              classA.setClassB(classB);
      
              System.out.println(XmlUtil.toXML(classA));
          }
      
      }
      MainRun

      輸出結果如下:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <classA>
          <classAId>11</classAId>
          <classAName>A1</classAName>
          <classB>
              <classBId>22</classBId>
              <classBName>B2</classBName>
          </classB>
      </classA>

      這里要注意以下幾點

      1. 要序列化的類加上 @XmlRootElement注解,否則會報錯(錯誤提示很清晰,這里就不貼出來了)
      2. JAXB序列化XML時  默認序列化getter和setter,且getter和setter必須成對出現才會被序列化
      3. 屬性名稱,默認序列化出來的類和屬性名稱默認是首字母轉換為小寫,若需要控制屬性名稱需要在getter或setter上使用 @XmlElement(name="ClassAId") 指定名稱,這里要注意的是@XmlElement放置在getter或setter上都行,但只能放一個,也就是說不能同時在getter和setter上使用@XmlElement注解
      4. 如何控制根節點名稱?
        使用@XmlRootElement指定name屬性即可,如@XmlRootElement(name="ClassA")
      5. 怎么添加命名空間
        使用@XmlRootElement(namespace="cn.lzrabbit") 指定namespace屬性
      6. 怎么精確控制每個屬性名稱
        JAXB自動轉化為首字母小寫會導致不可預料的屬性名稱出現, 不嫌麻煩的話為每個屬性設置@XmlElement(name=""),想省事的話使用Field
      7. 怎么樣實現序列化時使用Field字段而不是使用setter和getter
        在要使用的類上面加上@XmlAccessorType(XmlAccessType.FIELD)注解,并指定為XmlAccessType.FIELD,這里強烈推薦使用@XmlAccessorType(XmlAccessType.FIELD)注解,因為這樣你可以精確的控制每個元素的名稱,而不需要為每個屬性去設置@XmlElement(name="")注解,當然也可以在Field上使用@XmlElement注解

      下面給出使用了使用如上注解后的代碼示例

      @XmlRootElement(namespace="cn.lzrabbit")
      @XmlAccessorType(XmlAccessType.FIELD)
      public class ClassA {
          private int classAId;
          
          @XmlElement(name="ClassAName")
          private String classAName;
      
          private ClassB classB;
      
          public int getClassAId() {
              return classAId;
          }
          public void setClassAId(int classAId) {
              this.classAId = classAId;
          }
      
          public String getClassAName() {
              return classAName;
          }
      
          public void setClassAName(String classAName) {
              this.classAName = classAName;
          }
      
          public ClassB getClassB() {
              return classB;
          }
      
          public void setClassB(ClassB classB) {
              this.classB = classB;
          }
      }
      
      @XmlRootElement
      @XmlAccessorType(XmlAccessType.FIELD)
      public class ClassB {
          private int ClassBId;
          private String ClassBName;
      
          public int getClassBId() {
              return ClassBId;
          }
      
          public void setClassBId(int classBId) {
              this.ClassBId = classBId;
          }
      
          public String getClassBName() {
              return ClassBName;
          }
      
          public void setClassBName(String classBName) {
              this.ClassBName = classBName;
          }
      }
      View Code

      輸出xml為

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <ns2:classA xmlns:ns2="cn.lzrabbit">
          <classAId>11</classAId>
          <ClassAName>A1</ClassAName>
          <classB>
              <ClassBId>22</ClassBId>
              <ClassBName>B2</ClassBName>
          </classB>
      </ns2:classA>

       本篇先寫到這里,下一篇寫下默認命名空間及自定義命名空間前綴的處理

       

      posted @ 2014-04-13 13:46  懶惰的肥兔  閱讀(21234)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 欧美高清狂热视频60一70| 黑人巨大无码中文字幕无码| 中文字幕人妻色偷偷久久| 一本久道中文无码字幕av| 亚洲中文字幕无码av永久| 亚洲最大成人免费av| 久久婷婷成人综合色| 亚洲色在线v中文字幕| 国产一区二区在线激情往| 人妻有码av中文字幕久久琪| 亚洲蜜桃av一区二区三区| 亚洲二区中文字幕在线| 日韩av一区二区不卡在线| 国内精品久久人妻无码妲| 国产最大的福利精品自拍| 国产高清自产拍av在线| 国产精品一区二区在线欢| 免费黄色大全一区二区三区| 国产一区国产二区在线视频| 四虎av永久在线精品免费观看| 精品视频在线观看免费观看| 亚洲鸥美日韩精品久久| 国产精品自拍午夜福利| 久久av色欲av久久蜜桃网| 日韩国产成人精品视频| 人妻系列中文字幕精品| 亚洲人成网站77777在线观看| 国产综合色在线精品| 亚洲熟女乱综合一区二区| 日韩av无码中文无码电影| 中文字幕一区二区人妻电影| 疯狂做受XXXX高潮国产| 国产目拍亚洲精品二区| av午夜福利亚洲精品福利| 毛葺葺老太做受视频| 岛国一区二区三区高清视频| 丝袜无码一区二区三区| 国产睡熟迷奷系列网站| 精品无码一区二区三区的天堂| 精品人妻日韩中文字幕| 精品久久久无码中文字幕|