xml(一)对于restemplate接收xml返回对象时候,java 映射中@XmlElement和@XmlAttribute的区别-程序员宅基地

技术标签: java  xml  # xml  xml解析  java对象映射xml  

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中变成了标签,其他的类似,可以看着类上的代码对比结果,来理解两者之间的区别。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_24607837/article/details/89181312

智能推荐

迷宫(BFS)_4;:/^b7bfs73lty^'%4:/^b7bfs73lty^666丨66?/一一一守'i-6_-程序员宅基地

文章浏览阅读206次。题目链接:https://nanti.jisuanke.com/t/43124很SB的一个题目。不知道错在了哪儿。。代码是参考网上的一个代码:#include<bits/stdc++.h> using namespace std; #define ll long long #define N 1010 #define inf 0x3f3f3f3f char g[N][1..._4;:/^b7bfs73lty^'%4:/^b7bfs73lty^666丨66?/一一一守'i-6_

环形队列的思路及代码实现(java)_实现环形队列的各种基本运算的算法思路-程序员宅基地

文章浏览阅读313次。数组模拟环形队列的思路及代码实现思路如下:1、front 变量的含义做一个调整: front 就指向队列的第-个元素也就是说arrfront]就是队列的第一个元素front的初始值= 02、 rear变量的含义做- -个调整: rear 指向队列的最后- -个元素的后- -个位置。因为希望空出一-个空间做为约定.rear的初始值=03、当队列满时,条件是(rear + 1) % maxSize front [满]4、对队列为空的条件,rear== front空5、当我们这样分析,队列中有效的数据_实现环形队列的各种基本运算的算法思路

搜狗输入法中英文标点符号切换方式_搜狗输入法标点符号改中文-程序员宅基地

文章浏览阅读3.1k次。搜狗输入法中文文标点切换概述写代码时需要使用英文标点符号, 稍不注意使用中文标点就会报错,并且在写页面时又需要使用中午标点符号,总是来回切换挺费劲,可以通过全半角的方式让搜狗输入法自动完成切换配置方式第一步:第二步:..._搜狗输入法标点符号改中文

redis狂神说笔记超详细(总结不易)_狂神redis笔记-程序员宅基地

文章浏览阅读3.6k次,点赞23次,收藏81次。redis狂神说笔记/阿里云服务器连接一.安装windows安装linux安装1.官网地址:https://redis.io/download2.下载Xshell,Xftp免费版3.链接阿里云服务器4.安装Xftp,连接阿里云服务器5.![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330172112103.png)6.文件上传到服务器,利用Xftp7.解压安装包8.进入解压后文件9.基本环境安装二.测试性能三.基础知识redis是单线程的redis-key四.五_狂神redis笔记

字节面试官:一条sql执行慢的原因?如何优化?-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏19次。点击上方“程序猿技术大咖”,关注并选择“设为星标”回复“加群”获取入群讨论资格!作为二本上岸大厂的后端应届生,深知没人带一路摸索的艰辛,想把自己的心路历程与经验心得收获分享给大家。后期大厂..._sql执行慢如何优化

用JNI进行Java编程---高级主题及附录_通过jni循环运行java-程序员宅基地

文章浏览阅读1.4k次。概述从 Java 程序内调用本机代码破坏了 Java 程序的可移植性和安全性。尽管已编译的 Java 字节码保持了很好的可移植性,但必须为您打算用来运行该应用程序的每个平台重新编译本机代码。另外,由于本机代码在 JVM 之外执行,所以约束它的安全性协议不必和 Java 代码的相同。从本机程序调用 Java 代码也很复杂。因为 Java 语言是面向对象的,所以从本机应用程序调用 Ja_通过jni循环运行java

随便推点

Matlab 关于彩色图像的平移、旋转以及对称处理_matlab中怎么把图对称-程序员宅基地

文章浏览阅读7.1k次,点赞13次,收藏53次。Matlab 关于彩色图像的平移、旋转以及对称处理_matlab中怎么把图对称

AttributeError: ‘tuple‘ object has no attribute ‘shape‘_attributeerror: 'maxpooling2d' object has no attri-程序员宅基地

文章浏览阅读6.9k次。AttributeError: ‘tuple’ object has no attribute ‘shape’在将keras代码改为tensorflow2代码的时候报了如下错误 AttributeError: 'tuple' object has no attribute 'shape'经过调查发现,损失函数写错了原来的是这样model.compile(loss=['binary_crossentropy'], optimizer=optimizers.Adam(lr_attributeerror: 'maxpooling2d' object has no attribute 'shape

mybatis的xml中<=号被转义_<=转义-程序员宅基地

文章浏览阅读646次。解决方案:<![CDATA[<=]]>解析:术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。在 XML 元素中,"<" 和 “&” 是非法的。“<” 会产生错误,因为解析器会把该字符解释为新元素的开始。“&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。某些..._<=转义

Java关于scan,break scan_java scan: {}-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏2次。看源码的时候,看到了新的语法,scan,break scan。下面源码摘抄于String.class的toUpperCase(Locale locale)方法/* Now check if there are any characters that need to be changed. */scan: { for (firstLower = 0 ; firstLower &..._java scan: {}

Nginx 管理 SSL 流量 - 加密 NGINX 和 upstream 服务器组之间的 HTTP 流量_nginx upstream ssl-程序员宅基地

文章浏览阅读3.1k次。原文地址1. 先决条件 PrerequisitesNginx 或 Nginx Plus。一台代理服务器或一组 upstream 服务器。SSL 证书和私钥。2. 获取 SSL 的服务器证书可以从可信的证书颁发机构(certificate authority,CA)购买证书,或通过 OpenSSL 库自己创建证书。服务器证书和私钥应该被放到每一台 upstream 服..._nginx upstream ssl

开发艺术探索--理解RemoteViews_romotevie-程序员宅基地

文章浏览阅读560次。<>第五章,理解RemoteViews RemoteViews的应用 RemoteViews的内部机制 RemoteViews的意义应用RemoteViews字面意思是一个远程View,可以在其他进程中显示.使用场景是 通知栏和桌面小部件.通过应用的包名和布局文件的资源id即可创建RemoteViews对象,通知栏通过NotificationManager._romotevie

推荐文章

热门文章

相关标签