2025年xml(一)对于restemplate接收xml返回对象时候,java 映射中@XmlElement和@XmlAttribute的区别

xml(一)对于restemplate接收xml返回对象时候,java 映射中@XmlElement和@XmlAttribute的区别XmlElement 和 XmlAttribute 区别描述 XmlElement 将 java 对象的属性映射为 xml 的节点 在使用 XmlElement 时 可通过 name 属性改变 java 对象属性在 xml 中显示的名称 eg XmlElement 该属性作为 xml 的 element 且可以增加属性 name

大家好,我是讯享网,很高兴认识大家。

XmlElement和@XmlAttribute区别描述

  • @XmlElement将java对象的属性映射为xml的节点,在使用@XmlElement时,可通过name属性改变java对象属性在xml中显示的名称。eg:@XmlElement该属性作为xml的element,且可以增加属性(name="NewElementName"),那么生成的xml串的elment的标签是NewElementName
  • @XmlAttribute將被序列化为xml节点中的属性

证明    

  •  使用@XmlElement,并且带有name属性,修改生成的xml标签
package test.bean;      import javax.xml.bind.annotation.XmlElement;   import javax.xml.bind.annotation.XmlRootElement;      @XmlRootElement(name="rootclass")   public class RootClass {          private EleClassA a;       private EleClassB b;       private String root;       private String rootA;              @XmlElement(name="eleClassA")       public EleClassA getA() {           return a;       }       public void setA(EleClassA a) {           this.a = a;       }       @XmlElement(name="EleclassA")       public EleClassB getB() {           return b;       }       public void setB(EleClassB b) {           this.b = b;       }       public String getRoot() {           return root;       }       public void setRoot(String root) {           this.root = root;       }       public String getRootA() {           return rootA;       }       public void setRootA(String rootA) {           this.rootA = rootA;       }          }  

讯享网
  •   使用@XmlElement,并且不带有name属性
讯享网package test.bean;      import javax.xml.bind.annotation.XmlAttribute;   import javax.xml.bind.annotation.XmlElement;      public class EleClassA {          private String eleA;       private String eleB;              private String attrC;          @XmlElement       public String getEleA() {           return eleA;       }          public void setEleA(String eleA) {           this.eleA = eleA;       }          @XmlElement(name="elebnewname")       public String getEleB() {           return eleB;       }          public void setEleB(String eleB) {           this.eleB = eleB;       }          @XmlAttribute      public String getAttrC() {           return attrC;       }          public void setAttrC(String attrC) {           this.attrC = attrC;       }          }  
  •  使用@XmlAttribute
package test.bean;      import javax.xml.bind.annotation.XmlAttribute;   import javax.xml.bind.annotation.XmlElement;      public class EleClassB {          private String attrUserName;       private String attrPassword;              private String eleCode;              @XmlAttribute       public String getAttrUserName() {           return attrUserName;       }       public void setAttrUserName(String attrUserName) {           this.attrUserName = attrUserName;       }       @XmlAttribute(name="password")       public String getAttrPassword() {           return attrPassword;       }       public void setAttrPassword(String attrPassword) {           this.attrPassword = attrPassword;       }       @XmlElement       public String getEleCode() {           return eleCode;       }       public void setEleCode(String eleCode) {           this.eleCode = eleCode;       }  


运行Test1类中main方法,执行结果:

讯享网package test;      import java.io.StringWriter;      import javax.xml.bind.JAXBContext;   import javax.xml.bind.JAXBException;   import javax.xml.bind.Marshaller;      import test.bean.EleClassA;   import test.bean.EleClassB;   import test.bean.RootClass;      public class Test1 {          public static void main(String[] args) {           RootClass rc = new RootClass();           EleClassA a = new EleClassA();           EleClassB b = new EleClassB();                      a.setAttrC("attrc");           a.setEleA("eleA");           a.setEleB("eleB");                      b.setAttrPassword("attrPassword");           b.setAttrUserName("attrUsrName");           b.setEleCode("eleCode");                      rc.setA(a);           rc.setB(b);           rc.setRoot("root");           rc.setRootA("rootA");                                 JAXBContext context;           try {               context = JAXBContext.newInstance(RootClass.class);               Marshaller mar = context.createMarshaller();               mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);               mar.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");                              StringWriter writer = new StringWriter();                              mar.marshal(rc, writer);                              System.out.println(writer.toString());           } catch (JAXBException e) {               e.printStackTrace();           }                  }   }  
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>   <rootclass>       <eleClassA attrC="attrc">           <eleA>eleA</eleA>           <elebnewname>eleB</elebnewname>       </eleClassA>       <EleclassA attrUserName="attrUsrName" password="attrPassword">           <eleCode>eleCode</eleCode>       </EleclassA>       <root>root</root>       <rootA>rootA</rootA>   </rootclass>  

总结:

  • 可以看出EleClassA这个类中,attrc上使用标签@XmlAttribute在xml中北设置为eleClassA元素的属性。
  • 在RootClass类中,geta上使用注解@XmlElement(name="eleClassA"),在xml中变成了标签,其他的类似,可以看着类上的代码对比结果,来理解两者之间的区别。
小讯
上一篇 2025-01-27 23:29
下一篇 2025-02-17 20:15

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/27107.html