杰克逊顶部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

在本教程中,我们将会看看如何使用Jackson 2.x将Java对象序列化为XML数据,并将其反向回到POJO

我们将专注于不需要大量复杂性或自定义的基本操作。

2。XMLMapper.目的

XMLMapper.是来自杰克逊2.x的主类,它有助于我们序列化,因此我们需要创建它的实例:

xmlmapper mapper = new xmlmapper();

映射器可用Jackson-DataFormat-XMLjar,所以我们必须将其添加为依赖我们的pom.xml.

<依赖>  com.fasterxml.jackson.dataformat   jackson-datomformat-XML   2.11.1  

请检查最新版本的jackson-datomformat-xml依赖项在maven存储库中。

3.将Java序列化为XML

XMLMapper.是一个子类ObjectMapper.其中用于JSON序列化。但是,它为父类添加了一些XML特定调整。

我们现在可以查看如何使用它来执行实际的序列化。让我们先创建一个Java类:

class simplebean {private int x = 1;私人int y = 2;//标准安置者和getters}

3.1。序列化到XML细绳

我们可以将Java对象序列化为XML细绳

@test public void whenjavaserializedtoxmlstr_thencorrect()抛出jsonprocessingexception {xmlmapper xmlmapper = new xmlmapper();字符串XML = XMLMAPPER.WRITEVALUEASTRING(新SimpleBean());assertnotnull(XML);}

结果我们将得到:

  1   2  

3.2。序列化到XML文件

我们还可以将Java对象序列化为XML文件:

@test public void whenjavaserializedtoxmlfile_thencorrect()抛出ioException {xmlmapper xmlmapper = new xmlmapper();xmlmapper.writevalue(新文件(“simple_bean.xml”),新的SimpleBean());文件文件=新文件(“simple_bean.xml”);assertnotnull(文件);}

下面我们可以看到命名的结果文件的内容simple_bean.xml.

  1   2  

4.将XML反序列为Java

在本节中,我们将研究如何从XML获取Java对象。

4.1。从XML字符串反序列化

与序列化一样,我们也可以将XML字符串反序列为Java对象:

@test公共void whenjavagotfromxmlstr_thencorrect()抛出IoException {XMLMapper XMLMAPPER = New XMLMAPPER();SimpleBean Value = XMLMapper.readValue(“  1   2  ”,simplebean.class);asserttrue(value.getx()== 1 && value.gety()== 2);}

4.2。从XML文件反序列化

同样,如果我们有XML文件,我们可以将其转换回Java对象。

在这里,我们首先将文件读入输入流,然后将输入流转换为a细绳用简单的实用方法。

其余代码类似于来自第4.1节中的一个代码:

@test public void whenjavagotfromxmlfile_thencorrect()抛出ioException {file file = new文件(“simple_bean.xml”);xmlmapper xmlmapper = new xmlmapper();String XML = InputStreamToString(新FileInputStream(文件));SimpleBean Value = XMLMapper.ReadValue(XML,SimpleBean.class);asserttrue(value.getx()== 1 && value.gety()== 2);}

实用方法:

公共字符串InputStreamToString(InputStream是)抛出IoException {StringBuilder SB = New StringBuilder();弦线;BufferedReader BR =新BufferedReader(新InputStreamReader(IS));虽然((line = br.readline())!= null){sb.append(行);} Br.Close();返回sb.tostring();}

5.处理资本化元素

在本节中,我们将研究如何处理我们将XML具有大写元素的方案来反驳,或者我们需要将Java对象序列化为大写的一个或多个元素的XML。

5.1。从XML反序列化细绳

假设我们有一个带有一个字段的XML:

  1   2  

为了正确处理大写元素,我们需要用“x”字段注释@jsonproperty.注解:

Class SimpleBeanforcapitizedFields {@JSonProperty(“x”)私有int x = 1;私人int y = 2;//标准getters,setter}

我们现在可以正确地反驳XML细绳返回Java对象:

@test公共void whenjavagotfromxmlstrwithcapitalelem_thencorrect()抛出ioException {xmlmapper xmlmapper = new xmlmapper();simplebeanforcapinalizedfields值= xmlmapper.readvalue(“  1   2  ”simplebeanforcapitizedfields.class);asserttrue(value.getx()== 1 && value.gety()== 2);}

5.2。序列化到XML字符串

通过注释必填字段@jsonproperty,我们可以正确地将Java对象序列化为XML细绳有一个或多个大写元素:

@test public vod whilejavaserializedtoxmlfilewithcapitalizedfield_thencorrect()抛出IoException {XMLMapper XMLMAPPER = New XMLMapper();xmlmapper.writevalue(新文件(“target / simple_bean_capitalized.xml”),new simplebeanforcapitizedfields());文件文件=新文件(“target / simple_bean_capitalized.xml”);assertnotnull(文件);}

6。连载列表到XML

XMLMapper.能够将整个Java Bean序列化为文档。要将Java对象转换为XML,我们将使用嵌套对象和数组进行一个简单的示例。

我们的意图是序列化a对象,以及其组成地址对象,进入XML。

我们的最终XML看起来像:

  rohan   daye    9911034731   9911033478   <地址>  name1   City1   <地址>  Name2   City2   

请注意,我们的电话号码封装在一个电话号码我们的地址不是的套装。

我们可以通过@jacksonxmalementWrapper.在我们的诠释班级:

公共最终类人{私有字符串名字;私有字符串LastName;私有列表 phonenumbers = new arraylist <>();@jacksonxmalelementwrapper(usewrapping = false)私有列表<地址>地址= new arraylist <>();//标准安置者和getters}

实际上,我们可以用换包元素名称@jacksonxmalElementWrapper(localname ='phonenumbers')。或者,如果我们不想包装我们的元素,我们可以禁用映射@jacksonxmalelementWrapper(使用wrapping= false)

然后让我们定义我们的地址类型:

公共类地址{String StreetName;弦城;//标准安置者和getters}

杰克逊照顾我们的休息。像之前一样,我们可以简单地打电话writevalue.再次:

私有静态最终字符串XML =“ ... ”;@test public void whenjavaserializedtoxmlfile_thensccess()抛出IoException {XMLMapper XMLMapper = New XMLMapper();人物= testperson();//测试数据bytearrayoutputstream bytearrayoutputstream = new bytearrayoutputstream();xmlmapper.writevalue(bytearrayoutputstream,person);assertequals(xml,bytearrayoutputstream.tostring());}

7.将XML反序列化为列表

杰克逊可以读取包含对象列表的XML。

如果我们以前携带相同的XML,那么ReadValue.方法只是很好:

@test public void whenjavadeserialized fromxmlfile_thencorrect()抛出IoException {XMLMapper XMLMAPPER = New XMLMapper();person value = xmlmapper.readvalue(XML,person.class);assertequals(“city1”,value.getAddress()。获取(0).getcity());assertequals(“city2”,value.getAddress()。Get(1).getCity());}

结论

这个简单的文章说明了如何将简单的POJO序列化为XML并从基本XML数据获取POJO。

我们还研究了如何序列化和反序列化包含集合的复杂豆类。

伴随本文的源代码可用GitHub.

杰克逊底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!