Jackson 生成xml格式文件
Jackson 生成xml格式文件
Jackson是java应用中流行的操作Json工具库,很快成为Java生态中事实标准,Spring boot默认也使用Jackson。从版本2开始,支持json的同时引入成熟的xml实现。
1. 环境依赖
增加Jackson xml 模块,仅需要一个依赖:
<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.9.0</version>
</dependency>
Gradle版本:
compile "com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.9.0"
1.1 配置Jackson Xml 模块
Jackson通常使用 ObjectMapper
实例;如果要使用xml相关操作,则需要使用 XmlMapper
类,其是 ObjectMapper
类的派生类,两者使用方式几乎一致。
最简单方式定义:
ObjectMapper objectMapper = new XmlMapper();
也可以增加一些通用配置:
JacksonXmlModule xmlModule = new JacksonXmlModule();
xmlModule.setDefaultUseWrapper(false);
ObjectMapper objectMapper = new XmlMapper(module);
对2.9版本,仅对xml有效的配置包括:
- setDefaultUseWrapper – 定义默认情况下是否为未带注释的列表属性使用包装器。即对列表属性生成一个外层元素。
- setXMLTextElementName – 当处理字符串数据时使用虚拟名称。
1.2 Spring Boot配置
由于Spring Boot默认没有暴露XmlMapper
作为Bean,因为会与 ObjectMapper
冲突,XmlMapper
是其子类。但可以使用MappingJackson2XmlHttpMessageConverter
信息转换Bean进行获取。配置示例:
@Component
public class MetaConvert implements IMetaConvert{private ObjectMapper xmlMapper;public MetaConvert(MappingJackson2XmlHttpMessageConverter xmlConverter) {xmlMapper = xmlConverter.getObjectMapper();}@Overridepublic String convertMetaToXml(Object metaInfo) {ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();try {xmlMapper.writeValue(byteArrayOutputStream, metaInfo);} catch (IOException e) {log.error(e.getMessage());throw MetaFileException.of(e.getMessage());}return byteArrayOutputStream.toString();}}
2. 处理xml
Jackson可以很轻松处理Json,利用一些注解进行标识。XmlMapper
是 ObjectMapper
的子类,仅为了处理xml,这意味着Api完全相同,可以直接使用。
2.1 写Xml
写Xml使用Jackson提供的多个重载方法 writeValue()
。举例,序列化对象至xml可以简单使用 writeValueAsString
方法:
String xml = objectMapper.writeValueAsString(input);
其他几个方法:
- Writing to a String
- Writing to a Byte Array
- Writing to a java.io.OutputStream – 如:网络连接的流
- Writing to a java.io.Writer
- Writing to a java.io.File
2.2 读Xml
刚才我们看到Jackson可以很好地处理写操作,它也可以处理读操作,同样利用多个重载方法 readValue()
方法。举例,从输入流中读xml生成Java Bean:
MyBean bean = objectMapper.readValue(inputStream, MyBean.class);
其他重载方法有:
- Reading from a String
- Reading from a Byte Array
- Reading from a java.io.InputStream – 如:网络连接的流
- Reading from a java.io.Reader
- Reading from a java.io.File
3. Jackson 序列化注解
Jackson XML模块支持Jackson提供的用于注释pojo的所有注释。这意味着我们有一组bean和注释,并根据ObjectMapper实例选择是获得XML还是JSON。在构造代码时,这是一个巨大的好处,因为不再担心在表示相同数据的不同bean之间进行转换,从而获得不同的序列化格式。
举例:
@JsonPropertyOrder({"age", "id", "name"})
public class Person {@JsonProperty("_id")private String id;private String name;private int age;@JsonIgnoreprivate String note;
}
生成json:
{"age":4,"_id":"12345","name":"George"
}
xml格式:
<Person><age>4</age><_id>12345</_id><name>George</name>
</Person>
3.1 针对xml的注解
Jackson Xml 模块增加了对xml特性支持的属性。这些注解用于控制元素(包括根元素)的xml命名空间、本地名称,字段是否被渲染为元素或普通文本,元素内容是否被渲染为CData 包装,集合属性是否使用包装元素等。下面针对常用注解进行分别说明。
@JacksonXmlProperty
@JacksonXmlProperty
可以用在bean的任何字段上,控制渲染元素的一些细节属性。通过该注解可以设置命名控件、本地名称、是否被序列化为元素或属性。举例如下:
public class Person {@JacksonXmlProperty(isAttribute = true, namespace = "urn.stackify.jacksonxml", localName = "_id")private String id;@JacksonXmlProperty(namespace = "urn.stackify.jackson")private String name;private String note;
}
输出结果:
<Person xmlns:wstxns1="urn.stackify.jacksonxml" wstxns1:_id="12345"><wstxns2:name xmlns:wstxns2="urn.stackify.jackson">Graham</wstxns2:name><note>Hello</note>
</Person>
@JacksonXmlRootElement
@JacksonXmlRootElement
与上面提及的注解类似,但作用与整个文档的根元素。可设定命名空间和本地名称,根元素不会作为属性序列化。我们看下面Person
POJO示例:
@JacksonXmlRootElement(namespace = "urn.stackify.jacksonxml", localName = "PersonData")
public class Person {private String id;private String name;private String note;
}
输出结果:
<PersonData xmlns="urn.stackify.jacksonxml"><id xmlns="">12345</id><name xmlns="">Graham</name><note xmlns="">Hello</note>
</PersonData>
@JacksonXmlText
我们在看看 @JacksonXmlText
注解。其表示属性被渲染为普通文本,无需额外元素包裹。举例:
public class Person {private String id;private String name;@JacksonXmlTextprivate String note;
}
输出结果:
<Person><id>12345</id><name>Graham</name>Hello
</Person>
当然你要谨慎使用该注解,确保生成xml为有效格式。
@JacksonXmlCData
@JacksonXmlCData
注解表示其内容不被xml解析,一般和@JacksonXmlText
一起使用。请看示例:
public class Person {private String id;@JacksonXmlCDataprivate String name;@JacksonXmlText@JacksonXmlCDataprivate String note;
}
输出结果为:
<Person><id>12345</id><name><![CDATA[Graham]]></name><![CDATA[Hello]]>
</Person>
@JacksonXmlElementWrapper
@JacksonXmlElementWrapper 注解覆盖setDefaultUseWrapper的确省设置。其能够让集合属性决定是否使用包装元素,并且也可以控制包装元素的本地名称和命名空间。
使用包装元素则增加额外元素包括所有集合元素,反之,直接列出所有集合元素:
class Wrapper {@JacksonXmlElementWrapper(localName = "list")private List names;
}
输出结果:
<Wrapper><list><names>John</names><names>Paul</names><names>George</names><names>Ringo</names></list>
</Wrapper>
如果设置不用包装元素:
@JacksonXmlElementWrapper(useWrapping = false)
输出结果:
<Wrapper><names>John</names><names>Paul</names><names>George</names><names>Ringo</names>
</Wrapper>
4. 总结
Jackson可以灵活地采用相同方式处理JSON和XML数据,Jackson Xml 模块还增加xml特有的处理方式和注解。
Jackson 生成xml格式文件相关推荐
- 【csv文件转xml文件】Excel表格数据快速批量生成xml格式文件
使用背景: 使用场景举例:数据集标签处理 有时候我们需要将固定格式的Excel表格文件(csv文件)转换为xml文件使用,例如我们在目标检测实验当中我们需要制作数据集Pascal VOC格式的标签文件 ...
- java使用jdom生成xml格式文件
本文生成xml使用的工具是jdom.jar,下载地址如下: 链接:https://eyun.baidu.com/s/3slyHgnj 密码:0TXF 生成之后的文档格式类型,就如上面的图片一样,简单吧 ...
- java生成XML格式文件,导入MS Project生成甘特图
公司需求需要生成如如下图所示的project甘特图,开发语言是java,网上找了很久也没有找到可以利用java生成这种甘特图的方案.退而求其次,改变需求生成可以导入project的xml文件. 首先用 ...
- voc数据集格式转换为coco数据集格式+修改xml格式文件
voc数据集格式转换为coco格式+修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 修改xml格式文件中部分内容 voc数据集格式→coco数据集格式 下面这份代码只需修改文件所在 ...
- XML格式文件详解及Java解析XML文件内容方法
XML格式文件详解 1.概述 XML,即可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者. ...
- 【Java】生成 .json格式文件工具类
package com.glodon.kgb.utils.json;import java.io.File; import java.io.FileOutputStream; import java. ...
- python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...
本文将带你了解软件测试技术之如何用python在Windows系统下,生成UNIX格式文件,希望对大家学测试技术有所帮助 如何用python在Windows系统下,生成UNIX格式文件 平时测试工作中 ...
- python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...
本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...
- python获取的html转换为json,python读取XML格式文件并转为json格式
XML文件如下: 红楼梦书名> 曹雪芹作者> 描述贾宝玉和林黛玉的爱情故事主要内容> 人民文学出版社出版社> 图书> 一.python读取XML格式文件代码: impor ...
- python处理文本文件实现生成指定格式文件的方法
python处理文本文件实现生成指定格式文件的方法 关于python处理文本文件实现生成指定格式文件,很多朋友都不知道该怎么弄. 下面是具体代码,希望对大家有帮助 可以在下面复制: import os ...
最新文章
- redis 未授权访问利用 两种方式
- Redis-Session无状态会话技术
- java list适配器_详解listview的四种适配器模式
- [机器学习] Boosting算法4 --- LightGBM介绍与分布式
- ps一点等于多少厘米_劝告大家:女人40岁后,体重多少算正常?太瘦也不好
- WP7中对ListBox的ItemTemplate中子元素的后台操作
- day10 java的this关键字
- android 指定资源id,Android 通过名称获取资源ID
- IDEA商店无法打开的解决方法
- python 图像压缩pca_在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
- 【BZOJ3505】[Cqoi2014]数三角形 组合数
- 常见物质相对介电常数(室温,频率低于1kHz)
- SaaS行业的六大安全问题
- VB.NET 通过vbs发送微信消息
- 遇到一点难题,请大拿帮忙看一下 万分感谢
- jenkins 下自动构建 生成二维码(不使用蒲公英 fir)
- 掌握这9个单行代码技巧!你也能写出『高端』Python代码 ⛵
- 可转债第一课:神奇的可转债
- 第24章 让唯美的雪花飘扬——三维粒子系统的实现
- 未来站在中国这一边(读后感)