`

JAVA bean与XML互转的利器---XStream

    博客分类:
  • xml
阅读更多
XStream是大名鼎鼎的thought works下的一个开源项目, 主要功能是提供Java bean 和XML文本之间的转换,另外还提供JAVA bean和JSON之间的转换,这个不在本次讨论的范围内。
在JAVA1.5以后XSteam也支持了annotation。 这时就只要在JAVA BEAN中添加若干annotation就可以了,当然如果不允许修改JAVA bean, 那XStream也提供register的方式,也是很简单的。通过几个方面具体说明一下:
1.基本转换;
2.使用别名;
3.处理属性;
4.处理list类型属性;
5.属性不参与转换;

1. 基本转换
这是一个普通的JAVA bean:
package xstreamTest; 
public class Person { 
    private String name; 
    private int age; 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getName() { 
        return this.name; 
    } 


转换代码是这样的:
XStream xstream = new XStream(); 
Person person = new Person(); 
person.setName("pli"); 
person.setAge(18); 
System.out.println(xstream.toXML(person)); 

我们得到了这样的结果:
<xstreamTest.Person> 
  <name>pli</name> 
  <age>18</age> 
</xstreamTest.Person> 
但是 有时候根标签不想使用包路径,如何搞呢,使用别名

2. 起别名
家丁我们希望将“xstreamTest.Person” 这个莫名其妙的element标签改为“person”我们应该这么做。

package xstreamTest; 
@XStreamAlias("person") 
public class Person { 
    private String name; 
    private int age; 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getName() { 
        return this.name; 
    } 
}

而执行代码会变成这样:
XStream xstream = new XStream(); 
xstream.autodetectAnnotations(true); 
Person person = new Person(); 
person.setName("pli"); 
person.setAge(18); 
System.out.println(xstream.toXML(person));

这样我们就得到了想要的:
<person> 
  <name>pli</name> 
  <age>18</age> 
</person> 

3. 处理属性
如果想要将JAVA bean中的“age”属性作为XML中person标签的一个attribute该怎么办呢。
这里介绍另外一个annotation:@XStreamAsAttribute, 我们的JAVA bean变成了这样:

@XStreamAlias("person") 
public class Person { 
    private String name; 
    @XStreamAsAttribute 
    private int age; 
     
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getName() { 
        return this.name; 
    } 


结果是这样的:

<person age="18"> 
  <name>pli</name> 
</person>

4. 处理List
如果JAVA bean中有List是什么情形呢。

@XStreamAlias("person") 
public class Person { 
    private String name; 
    @XStreamAsAttribute 
    private int age; 
     
    List<String> girlFriends; 
     
    public List<String> getGirlFriends() { 
        return girlFriends; 
    } 
 
    public void setGirlFriends(List<String> girlFriends) { 
        this.girlFriends = girlFriends; 
    } 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getName() { 
        return this.name; 
    } 


直接转换我们会得到这样的结果:
<person age="18"> 
  <name>pli</name> 
  <girlFriends> 
    <string>YuanYuanGao</string> 
    <string>QiShu</string> 
    <string>BoZhiZhang</string> 
  </girlFriends> 
</person>

XStream在这里提供了一个@XStreamImplicit(itemFieldName=***)的annotation来满足用户想将List的根节点去掉和改变列表名字的需求,对应到我们的例子上就是去掉<girlFriends>标签和改变"<string>".我们来看看效果。

@XStreamAlias("person") 
public class Person { 
    private String name; 
    @XStreamAsAttribute 
    private int age; 
    @XStreamImplicit(itemFieldName="girl") 
    List<String> girlFriends; 
     
    public List<String> getGirlFriends() { 
        return girlFriends; 
    } 
 
    public void setGirlFriends(List<String> girlFriends) { 
        this.girlFriends = girlFriends; 
    } 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getName() { 
        return this.name; 
    } 


结果是这样:

<person age="18"> 
  <name>pli</name> 
  <girl>YuanYuanGao</girl> 
  <girl>QiShu</girl> 
  <girl>BoZhiZhang</girl> 
</person> 

5. 忽略属性
如果在JAVA bean中有些属性不想被序列化,XStream提供了解决这个需求的annotation: @XStreamOmitField
比如说不想讲girlfriends这个List序列化

@XStreamAlias("person") 
public class Person { 
    private String name; 
    @XStreamAsAttribute 
    private int age; 
    @XStreamImplicit(itemFieldName="girl") 
    @XStreamOmitField 
    List<String> girlFriends; 
     
    public List<String> getGirlFriends() { 
        return girlFriends; 
    } 
 
    public void setGirlFriends(List<String> girlFriends) { 
        this.girlFriends = girlFriends; 
    } 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public String getName() { 
        return this.name; 
    } 

结果是这样:

<person age="18"> 
  <name>pli</name> 
</person>
分享到:
评论

相关推荐

    使用xstream进行java类与xml文件互转解析--代码

    本教程将深入探讨如何使用XStream进行Java类与XML文件之间的互转解析。 首先,我们需要引入XStream库。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; ...

    JavaXml及Bean互转

    本篇将详细介绍两种常用的Java XML与Bean互转方法:XStream库和JAXB(Java Architecture for XML Binding)框架。 一、XStream库 1. **XStream简介**: XStream是一个用于Java的轻量级库,它提供了一种简单的API来...

    将对象(java bean)转换为xml字符串

    XStream不仅能够将Java对象转换为XML,还可以反向将XML转换回Java对象,极大地简化了对象与XML之间的序列化和反序列化过程。 XStream库是由Johannes Lehtinen创建的一个开源项目,它是基于Java的,可以处理复杂的...

    xml解析及使用XStream实现javaBean与xml之间的转换

    本篇将详细讲解XML的解析方式及其在Java中的应用,特别是如何使用XStream库进行JavaBean与XML之间的互转。 1. **XML解析方式** - DOM解析:Document Object Model,它一次性加载整个XML文档到内存,形成一棵树形...

    powermock-classloading-xstream-1.4.7

    powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-class...

    JAVA对象与XML互转

    本篇将详细探讨这个主题,讲解如何使用Java进行XML与对象的互转。 一、Java对象转XML 1. **JAXB**(Java Architecture for XML Binding):这是Java标准API,用于将Java对象映射到XML文档,反之亦然。使用JAXB,我们...

    xstream 1.3.1.jar bean对象转换为xml

    1. **引入库**:首先,你需要在项目中引入XStream库,这可以通过添加对应的jar文件(如xstream-1.3.1.jar)或者在Maven或Gradle等构建工具中配置依赖完成。 2. **创建XStream实例**:创建一个XStream实例,通常你会...

    xstream-1.3.1.jar javabean与xml之间的转化

    XStream 是一个强大的 Java 库,它允许程序员以一种简单直观的方式将 Java 对象序列化为 XML,同时也可以从 XML 文档反序列化回 ...在项目中使用 xstream-1.3.1.jar,可以轻松实现 Java 对象与 XML 文档之间的转换。

    xstream-1.4.3.jar 包 对象转xml

    xstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包...

    xStream xml to bean

    这个工具类的目标就是利用xStream的功能,方便地将XML文档转换为Java Bean对象,以及将Bean对象转换为XML字符串。 xStream的核心思想是通过反射和类型映射来实现对象与XML之间的转换。它使用一种称为“annoation”...

    xstream-1.4.15.jar

    XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...

    xstream-1.4.7.jar及源码;xml-pull-1.3.1.jar

    xml-pull-1.3.1.jar工具类,xstream-1.3.jar,XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。 因此XML常用于数据交换、对象序列化(这种序列化和...

    xstream-1.4.3-sources.jar

    XStream 用法详解 XML 转换为 java 实体类 所需要的 xstream-1.4.3-sources.jar jar包 具体实现请参考 http://blog.csdn.net/morning99/article/details/28875159

    xstream-1.4.2.jar

    XStream-1.4.2可能是一个稳定且广泛使用的版本,对于那些需要处理XML与Java对象之间转换的项目来说,它是一个可靠的选择。 标签"xstream.jar"明确了这是一个Java档案(JAR)文件,通常包含Java类、资源和其他相关...

    Java用xStream拼接xml

    xStream简化了Java对象与XML之间的转换,使得在处理XML数据时,开发者无需关注底层的XML构造细节。在Web Service接口对接时,如果需要传递XML内容,使用xStream可以高效、便捷地完成XML的拼接。通过合理配置和使用,...

    XStream在Java对象和XML之间相互转换

    标题和描述提到的三个JAR文件——xstream-1.3.jar、kxml2-2.3.0.jar和xpp3_min-1.1.4c.jar,是XStream库的组成部分,它们提供了必要的XML解析支持。 1. **XStream核心功能**: - **序列化**: XStream可以将一个...

    java对象与xml的互相转换

    Java对象与XML之间的转换是Java开发中常见的需求,特别是在数据交换、配置文件存储或Web服务交互等场景。本文将深入探讨如何实现Java对象到XML以及XML到Java对象的转换。 首先,Java对象到XML的转换通常涉及到Java...

    Xstream_java对象和xml的互相转换

    `xstream-1.3.1.jar` 是 XStream 库本身,包含了所有必要的类和方法来实现对象与 XML 的转换。而 `xpp3_min-1.1.4c.jar` 是一个解析器库,XStream 使用它来解析 XML 输入,这是 XStream 默认使用的解析器之一。 ...

    使用XStream是实现XML与Java对象的转换(6)--持久化

    这篇博客“使用XStream是实现XML与Java对象的转换(6)--持久化”深入探讨了如何利用XStream进行持久化操作,使得对象状态能够持久保存到磁盘,同时也能够从XML文档中恢复。 首先,我们需要理解XStream的核心概念。...

    好用的xStream XML和JAVA对象互相转换的简单示例

    然而,将XML与Java对象直接对应起来操作可以大大简化编程工作,这就是XStream库的作用所在。XStream是一个轻量级、高性能的库,能够将Java对象序列化为XML,同时也能将XML反序列化回Java对象,实现XML和Java对象的...

Global site tag (gtag.js) - Google Analytics