java XML字符串和bean实体类互转
pom引入依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.13.1</version>
</dependency>
实体类
package vo;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;
import java.util.List;
@Data
@JacksonXmlRootElement(localName = "res")
public class PayInfoResVo {
/**
* 处理结果代码:200-成功
*/
@JacksonXmlProperty() //此注解的localName属性可以不填,默认为字段名称,如果字段首字母是大写的话,那就必须填写了
private String resultCode;
/**
* 处理结果描述
*/
@JacksonXmlProperty() //此注解的localName属性可以不填,默认为字段名称,如果字段首字母是大写的话,那就必须填写了
private String resultDesc;
/**
* 就诊纪录信息的集合
*/
@JacksonXmlElementWrapper(localName = "payList") //这个是循环的根节点
@JacksonXmlProperty() //此注解的localName属性可以不填,默认为字段名称,如果字段首字母是大写的话,那就必须填写了
private List<PayListInfoVo> payListInfo;
}
package vo;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.Data;
/**
* 就诊纪录信息
*/
@Data
@JacksonXmlRootElement()
public class PayListInfoVo {
/**
* 就诊流水号
*/
@JacksonXmlProperty()
private String clinicSeq;
/**
* 医院代码
*/
@JacksonXmlProperty()
private String hospitalId;
/**
* 接诊科室代码
*/
@JacksonXmlProperty()
private String deptId;
}
工具类
package util;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
/**
* XML和Bean互转工具类
*
* @author DaenMax
* 2022-4-20 11:11:15
*/
public class XmlToObjectUtil {
/**
* XML转Bean
*
* @param xml
* @param beanType
* @param <T>
* @return
*/
public static <T> T convertXmlToObject(String xml, Class<T> beanType) {
if (null != xml && !"".equals(xml)) {
try {
return new XmlMapper().readValue(xml, beanType);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Bean转XML
*
* @param object
* @return
*/
public static String convertObjectToXml(Object object) {
if (object != null) {
try {
XmlMapper xmlMapper = new XmlMapper();
//设置xml格式携带版本和编码信息<?xml version='1.0' encoding='UTF-8'?>
xmlMapper.enable(ToXmlGenerator.Feature.WRITE_XML_DECLARATION);
//字段值为null,自动忽略,不再序列化
xmlMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
return xmlMapper.writeValueAsString(object);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
return null;
}
}
测试
import util.XmlToObjectUtil;
import vo.PayInfoResVo;
import vo.PayListInfoVo;
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String[] args) {
make();
analysis();
}
/**
* 生成
*/
public static void make() {
PayInfoResVo payInfoResVo = new PayInfoResVo();
payInfoResVo.setResultCode("200");
payInfoResVo.setResultDesc("成功");
List<PayListInfoVo> list = new ArrayList<>();
PayListInfoVo payListInfoVo1 = new PayListInfoVo();
payListInfoVo1.setClinicSeq("123456");
payListInfoVo1.setHospitalId("阿萨德");
payListInfoVo1.setDeptId("fff");
list.add(payListInfoVo1);
PayListInfoVo payListInfoVo2 = new PayListInfoVo();
payListInfoVo2.setClinicSeq("98465");
payListInfoVo2.setHospitalId("设定图");
payListInfoVo2.setDeptId("bbb");
list.add(payListInfoVo2);
PayListInfoVo payListInfoVo3 = new PayListInfoVo();
payListInfoVo3.setClinicSeq("4567854");
payListInfoVo3.setHospitalId("换接口");
payListInfoVo3.setDeptId("jjj");
list.add(payListInfoVo3);
payInfoResVo.setPayListInfo(list);
String xml = XmlToObjectUtil.convertObjectToXml(payInfoResVo);
System.out.println(xml);
}
/**
* 解析
*/
public static void analysis() {
String xml = "<?xml version='1.0' encoding='UTF-8'?><res><resultCode>200</resultCode><resultDesc>成功</resultDesc><payList><payListInfo><clinicSeq>123456</clinicSeq><hospitalId>阿萨德</hospitalId><deptId>fff</deptId></payListInfo><payListInfo><clinicSeq>98465</clinicSeq><hospitalId>设定图</hospitalId><deptId>bbb</deptId></payListInfo><payListInfo><clinicSeq>4567854</clinicSeq><hospitalId>换接口</hospitalId><deptId>jjj</deptId></payListInfo></payList></res>\n";
PayInfoResVo payInfoResVo = XmlToObjectUtil.convertXmlToObject(xml, PayInfoResVo.class);
System.out.println(payInfoResVo);
}
}
效果
例外
另外有java XML字符串和json字符串互转
代码,地址:https://www.cnblogs.com/daen/p/16779870.html
java XML字符串和bean实体类互转的更多相关文章
- Java定义bean实体类中的变量时变量名的问题
首先:TMD,这个问题花了我两个多小时,居然是因为一个字母的大小写导致的,我瞬间就&Y^%^&%&()*%¥%¥¥&^#@%&; 事情是酱紫的: 我定义了一个变 ...
- xml转json和实体类的两种方式
本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...
- java:redis(java代码操作redis,实体类mapper生成器(generator))
1.redis_demo Maven ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...
- JAVA读取EXCEL_自动生成实体类
代码实现PropertyAnno.java import java.lang.annotation.ElementType; import java.lang.annotation.Retention ...
- XML之序列化C#实体类,DataTable,List
1. static void Main(string[] args) { #region 实体类 Request patientIn = new Request(); patientIn.System ...
- java反射获取和设置实体类的属性值 递归所有父类
最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...
- java中的几种实体类对象(PO,VO,DAO,BO,POJO)
一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...
- silverlight依据json字符串动态创建实体类
1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json); ...
- java怎么比较两个实体类的属性值
分享一下比较两个实体类的工具包 package cn.mollie.utils; import java.beans.Introspector; import java.beans.PropertyD ...
- 由json字符串生成C#实体类的工具
json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...
随机推荐
- HTTP 尝试获取 Client IP
HTTP 中获取 Client IP 相关策略需求, 在当下网络环境中多数只能提供建议作用. 更多的是 通过其它唯一标识来挖掘更多潜在价值. 本文主要就一个内容, 如何最大可能尝试在 HTTP 请求中 ...
- linux ln命令详解
介绍 ln是linux的一个重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...
- 非常实用的aix 6.1系统安装的教程
今年六月,我们公司出现了一次非常严重的数据丢失的事故.生产服务器崩溃导致所有的业务都陷于停滞,而且由于涉及到公司机密又无法贸然到数据恢复公司进行恢复,可是自己又无法解决.权衡利弊还是决定找一家有保密资 ...
- linux 上安装portainer.io
inux 上安装portainer.io 1.portainer.io是什么? 2.安装,运行镜像 3.登陆1.portainer.io是什么?Portainer是一个轻量级的Doc ...
- 事件监听、焦点--java进阶day03
1.事件 按钮是组件,点击后就会重新游戏 对于这种点击了组件之后,有逻辑触发的操作,就是事件 2.事件中的专有名词 绑定监听也就是绑定监视,是真正组织代码逻辑的地方 要有绑定监听就需要监听器,今天学习 ...
- 小白必看的cmd简单代码!(图片看不到的可复制 粘贴到Typroa进行观看)
打卡cmd的方法 直接window加r 输入cmd 在下方菜单 找到window标志,打开 输入命令提示符 更高级的cmd权限使用:右键命令提示符,点击"以管理员身份运行" 一些简 ...
- FDMemtable如何增加一条自身复制的记录
procedure TFrame_Bill.CopyARecord; var lAFDmemtable : TFDMemTable; begin {$REGION '增加一条复制的记录'} try l ...
- Postwoman教程
1.安装 打开git或cmder,输入如下命令: cd d:/GitDemo/ git clone https://github.com/liyasthomas/postwoman cd postwo ...
- 初学嵌入式是弄linux还是单片机?
作为一个从机械转行到嵌入式的工程师,我深刻理解初学者面临的困惑.嵌入式领域分支众多,初期选择Linux还是单片机确实是个让人纠结的问题.我当年就在这个问题上纠结了好久,走了不少弯路. 其实,我之所以能 ...
- Asp.net mvc基础(九)使用DropDownList下拉列表
第一种下拉列表写法: 后端 前端 第二种下拉列表写法: 使用Html辅助方法@Html.DropDownList("名称","List<SelectListItem ...