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

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中变成了标签,其他的类似,可以看着类上的代码对比结果,来理解两者之间的区别。
  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值