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实体类互转的更多相关文章

  1. Java定义bean实体类中的变量时变量名的问题

    首先:TMD,这个问题花了我两个多小时,居然是因为一个字母的大小写导致的,我瞬间就&Y^%^&%&()*%¥%¥¥&^#@%&; 事情是酱紫的: 我定义了一个变 ...

  2. xml转json和实体类的两种方式

    本文为博主原创,未经允许不得转载: xml在http通信中具有较高的安全性和传输速度,所以应用比较广泛, 在项目中往往需要对xml,json和实体类进行相互转换,在这里总结一下自己所用到的一些方法: ...

  3. java:redis(java代码操作redis,实体类mapper生成器(generator))

    1.redis_demo Maven  ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...

  4. JAVA读取EXCEL_自动生成实体类

    代码实现PropertyAnno.java import java.lang.annotation.ElementType; import java.lang.annotation.Retention ...

  5. XML之序列化C#实体类,DataTable,List

    1. static void Main(string[] args) { #region 实体类 Request patientIn = new Request(); patientIn.System ...

  6. java反射获取和设置实体类的属性值 递归所有父类

    最近做一个通用数据操作接口,需要动态获取和设置实体类的属性值,为了通用实体做了多重继承,开始网上找到代码都不支持父类操作,只能自己搞一个工具类了,此工具类可以设置和获取所有父类属性,代码贴下面拿走不谢 ...

  7. java中的几种实体类对象(PO,VO,DAO,BO,POJO)

    一.PO :(persistant object ),持久对象 可以看成是与数据库中的表相映射的java对象.使用Hibernate来生成PO是不错的选择. 二.VO :(value object) ...

  8. silverlight依据json字符串动态创建实体类

    1.接收json字符串: //用JsonValue转换json字符串是为了之后获得json字符串的每行数据和每一列的列名 JsonValue jv = JsonValue.Parse(json);   ...

  9. java怎么比较两个实体类的属性值

    分享一下比较两个实体类的工具包 package cn.mollie.utils; import java.beans.Introspector; import java.beans.PropertyD ...

  10. 由json字符串生成C#实体类的工具

    json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...

随机推荐

  1. 【Matlab】判断点和多面体位置关系的两种方法实现

    分别是向量判别法(算法来自他人论文).体积判别法(code 是我从网上找的). 方法一: 向量判别法 方法来自一会议论文:<判断点与多面体空间位置关系的一个新算法_石露>2008年,知网. ...

  2. 【Bug记录】node-sass安装失败解决方案

    node-sass 安装失败解决办法 前言 很多小伙伴在安装 node-sass 的时候都失败了,主要的原因是 node 版本和项目依赖的 node-sass 版本不匹配. 解决方案 解决方案:把项目 ...

  3. Chrome设置header请求响应头 Chrome ModHeader插件,添加/修改/删除HTTP请求标头和响应标头

    ModHeader,是一款可以添加/修改/删除请求标头和响应标头的浏览器插件. ModHeader插件功能 首先,ModHeader插件支持添加/修改/删除请求标头和响应标头,并可以启用基于URL / ...

  4. rsarsa-给定pqe求私钥对密文解密

    题目: Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters ...

  5. Docker 容器跨主机多网段通信解决方案

    一.MacVlan实现Docker的跨主机网络通信的方案有很多,如之前博文中写到的通过部署 Consul服务实现Docker容器跨主机通信    Macvlan工作原理:    Macvlan是Lin ...

  6. 代码块--java进阶day03

    1.代码块 1.局部代码块 定义在方法中的一对大括号,可以提早释放内存,走完{}里的逻辑后就会被释放,在之后的编程中无法使用 2.构造代码块 位置在类中,方法外的{},在构造方法执行的时候,构造代码块 ...

  7. ThreadPoolExecutor的内部类Worker详细解析

    一.定义 ThreadPoolExecutor 的内部类 Worker 是线程池的核心实现之一,它封装了线程和任务,并负责执行任务.Worker 类继承自 AbstractQueuedSynchron ...

  8. 一、Java语言介绍

    1.硬件知识介绍 2.常用dos命令以及快捷键 1 /** 2 *@desc: 复习 3 *@Description: 4 * dir:列出当前文件目录下的所有文件; 5 * md:创建一个新目录; ...

  9. [笔记]通过命令行连接MySQL数据库服务器的几种方式总结如下

    通过命令行连接MySQL数据库服务器的几种方式总结如下: 1.连接本地数据库,用户名为"root",密码"123456"(注意:"-p"和& ...

  10. Golang从0到1实现简易版expired LRU cache带图解

    1.支持Put.Get的LRU实现 想要实现一个带过期时间的LRU,从易到难,我们需要先学会如何实现一个普通的LRU,做到O(1)的Get.Put. 想要做到O(1)的Get,我们很容易想到使用哈希表 ...