关键词:
一、之前java读取xml配置文件时,总是通过dom4j第三方库主动解析,最近发现可以通过jdk类库将xml转换pojo。
二、编写xml转化工具类XmlUtils
package com.moy.demo.common.utils; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; /** * [Project]:cloud-demo-master <br/> * [Email]:[email protected] <br/> * [Date]:2018/4/30 <br/> * [Description]: <br/> * * @author YeXiangYang */ public abstract class XmlUtils { public static <T> T xmlFileToObject(String xmlFilePath, Class<T> clazz) { ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); try (InputStream inputStream = contextClassLoader.getResourceAsStream(xmlFilePath)) { JAXBContext context = JAXBContext.newInstance(clazz); Unmarshaller unmarshaller = context.createUnmarshaller(); T result = (T) unmarshaller.unmarshal(inputStream); return result; } catch (Exception e) { throw new RuntimeException("convert xml to POJO failure!", e); } } public static <T> T xmlStringToObject(String xmlString, Class<T> clazz) { try (Reader reader = new StringReader(xmlString)) { JAXBContext context = JAXBContext.newInstance(clazz); Unmarshaller unmarshaller = context.createUnmarshaller(); T result = (T) unmarshaller.unmarshal(reader); return result; } catch (Exception e) { throw new RuntimeException("convert xml string to POJO failure!", e); } } }
二、测试
a、第一步:定义一个xml配置文件如:cityList.xml
<?xml version="1.0" encoding="UTF-8" ?> <c c1="0"> <d d1="101020100" d2="上海" d3="shanghai" d4="上海"/> <d d1="101220101" d2="合肥" d3="hefei" d4="安徽"/> <d d1="101190101" d2="南京" d3="jiangshu" d4="江苏"/> <d d1="101010100" d2="北京" d3="beijing" d4="北京"/> <d d1="101270101" d2="成都" d3="chengdu" d4="四川"/> </c>
b、第二步:编写xml对应的实体City和CityList,并添加相应注解
package com.moy.demo.common.utils; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; /** * [Project]:cloud-demo-master <br/> * [Email]:[email protected] <br/> * [Date]:2018/4/30 <br/> * [Description]: <br/> * * @author YeXiangYang */ @XmlRootElement(name = "d") @XmlAccessorType(XmlAccessType.FIELD) public class City { @XmlAttribute(name = "d1") private String cityId; @XmlAttribute(name = "d2") private String cityName; @XmlAttribute(name = "d3") private String cityCode; @XmlAttribute(name = "d4") private String province; public String getCityId() { return cityId; } public void setCityId(String cityId) { this.cityId = cityId; } public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } @Override public String toString() { return "City{" + "cityId=‘" + cityId + ‘‘‘ + ", cityName=‘" + cityName + ‘‘‘ + ", cityCode=‘" + cityCode + ‘‘‘ + ", province=‘" + province + ‘‘‘ + ‘}‘; } }
package com.moy.demo.common.utils; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.util.List; /** * [Project]:cloud-demo-master <br/> * [Email]:[email protected] <br/> * [Date]:2018/4/30 <br/> * [Description]: <br/> * * @author YeXiangYang */ @XmlRootElement(name = "c") @XmlAccessorType(XmlAccessType.FIELD) public class CityList { @XmlElement(name = "d") private List<City> cityList; public List<City> getCityList() { return cityList; } public void setCityList(List<City> cityList) { this.cityList = cityList; } @Override public String toString() { return "CityList{" + "cityList=" + cityList + ‘}‘; } }
c、编写单元测试XmlUtilsTest
package com.moy.demo.common.utils; import org.junit.Test; import static org.junit.Assert.*; /** * [Project]:demo-master <br/> * [Email]:[email protected] <br/> * [Date]:2018/5/2 <br/> * [Description]: <br/> * * @author YeXiangYang */ public class XmlUtilsTest { @Test public void xmlFileToObject() { CityList cityList = XmlUtils.xmlFileToObject("cityList.xml", CityList.class); System.out.println(cityList); } @Test public void xmlStringToObject() { String xmlString = "<?xml version="1.0" encoding="UTF-8" ?> " + "<c c1="0"> " + " <d d1="101020100" d2="上海" d3="shanghai" d4="上海"/> " + " <d d1="101220101" d2="合肥" d3="hefei" d4="安徽"/> " + " <d d1="101190101" d2="南京" d3="jiangshu" d4="江苏"/> " + " <d d1="101010100" d2="北京" d3="beijing" d4="北京"/> " + " <d d1="101270101" d2="成都" d3="chengdu" d4="四川"/> " + "</c>"; CityList cityList = XmlUtils.xmlStringToObject(xmlString, CityList.class); System.out.println(cityList); } }
yexiangyang
需要基于 xml-mapping 将 POJO 转换为 XML 和 JSON 的工具
】需要基于xml-mapping将POJO转换为XML和JSON的工具【英文标题】:AtoolfortransformingPOJOtoXMLandJSON,basedonxml-mappingisneeded【发布时间】:2011-07-0821:56:58【问题描述】:我需要一个可以将POJO转换为XML和JSON字符串的开源工具。如果可以通过xml... 查看详情
OpenCSV:如何使用自定义列标题和自定义列位置从 POJO 创建 CSV 文件?
】OpenCSV:如何使用自定义列标题和自定义列位置从POJO创建CSV文件?【英文标题】:OpenCSV:HowtocreateCSVfilefromPOJOwithcustomcolumnheadersandcustomcolumnpositions?【发布时间】:2017-12-2512:15:30【问题描述】:我创建了一个MappingsBean类,其中指定... 查看详情
java中如何自定义xml文件中的xml格式
】java中如何自定义xml文件中的xml格式【英文标题】:Howtocustomizethexmlformatinanxmlfileinjava【发布时间】:2021-10-0610:57:50【问题描述】:我正在使用JaxbMarshaller将java对象转换为xml,并将Marshaller.JAXB_FORMATTED_OUTPUT设置为true。这给了我以... 查看详情
自定义mvc框架之工具类-图像处理类
...4个类:ubuntu:通过封装验证码类库一步步安装php的gd扩展自定义MVC框架之工具类-分页类的封装自定义MVC框架之工具类-文件上传类图像处理类:1,图片加水印处理(支持任意位置与九宫格位置)2,图片缩放处理(等比缩放,不变形裁剪... 查看详情
hutool国产工具类库
参考技术AJava工具类库:Hutool 该工具类,只需要引入它的依赖一个官方提供的例子,模拟一下表单提交Hutool还有其他很多工具,比如对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种U... 查看详情
如何在 .xml 文件而不是 .java 文件中设置自定义字体?
】如何在.xml文件而不是.java文件中设置自定义字体?【英文标题】:Howtosetcustomfontin.xmlfileinsteadof.javafile?【发布时间】:2016-07-2803:27:48【问题描述】:我正在创建一个要在其中设置自定义字体的应用程序。但我不能在.xml文件中使... 查看详情
为按钮生成选择器 xml 的 Android 工具
...1-1511:27:39【问题描述】:我想知道是否有人知道为您的自定义按钮生成xml选择器文件的工具。我有点厌倦了创建按钮,将它们转换为.9.png文件,然后在xml中复制和粘贴自定义选择器...我知道这些工具:http://www.androidicongenerato 查看详情
Spring RestTemplate 响应中从 JSON 到 Java/POJO 的自定义映射
】SpringRestTemplate响应中从JSON到Java/POJO的自定义映射【英文标题】:CustomMappingfromJSONtoJava/POJOinSpringRestTemplateresponse【发布时间】:2020-02-0700:26:12【问题描述】:我有一个SpringBoot应用程序,我在其中使用RestTemplate调用RestAPI,我收到... 查看详情
转:jaxbcontext生成xml文件或java类对象转化注解
...LBinding),提供了一个快速便捷的方式将Java对象与XML进行转换。在JAX-WS(Java的WebService规范之一)中,JDK1.6自带的版本JAX-WS2.1,其底层支持就是JAXB。 JAXB可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转... 查看详情
是否有将 Java POJO 转换为 JSON 和 XML 的库? [关闭]
】是否有将JavaPOJO转换为JSON和XML的库?[关闭]【英文标题】:IstherealibrarytoconvertJavaPOJOstoandfromJSONandXML?[closed]【发布时间】:2010-10-1402:56:21【问题描述】:我有一个对象图,我想在JSON和XML之间进行转换,以创建REST样式的API。我觉... 查看详情
java示例代码_基于带有自定义逻辑的模板转换XML。哪个框架?如何实现流媒体
java示例代码_基于带有自定义逻辑的模板转换XML。哪个框架?如何实现流媒体 查看详情
springmvc--09自定义converters(代码片段)
自定义Converters文章目录自定义Converters11.1什么是Converters11.2编写日期转化器11.3XML配置转化器11.4Java类配置转化器11.1什么是ConvertersContervers中文就是转化器的意思,在我们的SprinMVC中其实就是帮助我们转化数据的转化器,比... 查看详情
springmvc--09自定义converters(代码片段)
自定义Converters文章目录自定义Converters11.1什么是Converters11.2编写日期转化器11.3XML配置转化器11.4Java类配置转化器11.1什么是ConvertersContervers中文就是转化器的意思,在我们的SprinMVC中其实就是帮助我们转化数据的转化器,比... 查看详情
如何在c#中将XML转换为自定义对象[重复]
】如何在c#中将XML转换为自定义对象[重复]【英文标题】:HowtoconvertXMLtoacustomobjectinc#[duplicate]【发布时间】:2017-11-0423:51:18【问题描述】:XML文件如下。希望能够读取和写入以下文件。使用下面的代码,我可以搜索特定的页面名... 查看详情
自定义类型转换器
这里只讲日期类型转换器的自定义Struts2中有一些自定义类型转化器位置:但是此处的日期类型转换器只是将yyyy-MM-dd日期格式转化成为TueJun0600:00:00CST2017而对于产品来说可能涉及到yyyy/MM/dd和yyyyMMdd等,接下来就看例子吧!首先定... 查看详情
使用自定义 XSLT 将 XML 转换为 JSON 会丢失花括号
】使用自定义XSLT将XML转换为JSON会丢失花括号【英文标题】:TransformingXMLtoJSONwithcustomXSLTloosescurlybraces【发布时间】:2014-05-0321:56:54【问题描述】:我有一个.NET库,它使用XSLT文件将啤酒xml文件转换为web应用程序的json。XSLT文件看... 查看详情
深入了解java并发——《javaconcurrencyinpractice》14.构建自定义的同步工具
虽然章节的目的是介绍如何基于AQS等基类来构建自定义的同步工具,但详细的介绍了AQS的原理,并且详细的讲解了java.util.concurrent类库中许多基于AQS的常用同步工具对AQS的实现及原理。了解AQS之后对ReentrantLock、Semaphore、Co... 查看详情
将 Java 类库中的类替换为自定义版本
】将Java类库中的类替换为自定义版本【英文标题】:ReplaceaclasswithintheJavaclasslibrarywithacustomversion【发布时间】:2016-02-1109:57:25【问题描述】:javax/swing/plaf/basic中的类BasicLabelUI受confirmedbug影响。在我的应用程序中,我需要fixedversio... 查看详情