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 ...
随机推荐
- 【Matlab】判断点和多面体位置关系的两种方法实现
分别是向量判别法(算法来自他人论文).体积判别法(code 是我从网上找的). 方法一: 向量判别法 方法来自一会议论文:<判断点与多面体空间位置关系的一个新算法_石露>2008年,知网. ...
- 【Bug记录】node-sass安装失败解决方案
node-sass 安装失败解决办法 前言 很多小伙伴在安装 node-sass 的时候都失败了,主要的原因是 node 版本和项目依赖的 node-sass 版本不匹配. 解决方案 解决方案:把项目 ...
- Chrome设置header请求响应头 Chrome ModHeader插件,添加/修改/删除HTTP请求标头和响应标头
ModHeader,是一款可以添加/修改/删除请求标头和响应标头的浏览器插件. ModHeader插件功能 首先,ModHeader插件支持添加/修改/删除请求标头和响应标头,并可以启用基于URL / ...
- rsarsa-给定pqe求私钥对密文解密
题目: Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters ...
- Docker 容器跨主机多网段通信解决方案
一.MacVlan实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署 Consul服务实现Docker容器跨主机通信 Macvlan工作原理: Macvlan是Lin ...
- 代码块--java进阶day03
1.代码块 1.局部代码块 定义在方法中的一对大括号,可以提早释放内存,走完{}里的逻辑后就会被释放,在之后的编程中无法使用 2.构造代码块 位置在类中,方法外的{},在构造方法执行的时候,构造代码块 ...
- ThreadPoolExecutor的内部类Worker详细解析
一.定义 ThreadPoolExecutor 的内部类 Worker 是线程池的核心实现之一,它封装了线程和任务,并负责执行任务.Worker 类继承自 AbstractQueuedSynchron ...
- 一、Java语言介绍
1.硬件知识介绍 2.常用dos命令以及快捷键 1 /** 2 *@desc: 复习 3 *@Description: 4 * dir:列出当前文件目录下的所有文件; 5 * md:创建一个新目录; ...
- [笔记]通过命令行连接MySQL数据库服务器的几种方式总结如下
通过命令行连接MySQL数据库服务器的几种方式总结如下: 1.连接本地数据库,用户名为"root",密码"123456"(注意:"-p"和& ...
- Golang从0到1实现简易版expired LRU cache带图解
1.支持Put.Get的LRU实现 想要实现一个带过期时间的LRU,从易到难,我们需要先学会如何实现一个普通的LRU,做到O(1)的Get.Put. 想要做到O(1)的Get,我们很容易想到使用哈希表 ...