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. HTTP 尝试获取 Client IP

    HTTP 中获取 Client IP 相关策略需求, 在当下网络环境中多数只能提供建议作用. 更多的是 通过其它唯一标识来挖掘更多潜在价值. 本文主要就一个内容, 如何最大可能尝试在 HTTP 请求中 ...

  2. linux ln命令详解

    介绍 ln是linux的一个重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...

  3. 非常实用的aix 6.1系统安装的教程

    今年六月,我们公司出现了一次非常严重的数据丢失的事故.生产服务器崩溃导致所有的业务都陷于停滞,而且由于涉及到公司机密又无法贸然到数据恢复公司进行恢复,可是自己又无法解决.权衡利弊还是决定找一家有保密资 ...

  4. linux 上安装portainer.io

    inux 上安装portainer.io    1.portainer.io是什么?    2.安装,运行镜像    3.登陆1.portainer.io是什么?Portainer是一个轻量级的Doc ...

  5. 事件监听、焦点--java进阶day03

    1.事件 按钮是组件,点击后就会重新游戏 对于这种点击了组件之后,有逻辑触发的操作,就是事件 2.事件中的专有名词 绑定监听也就是绑定监视,是真正组织代码逻辑的地方 要有绑定监听就需要监听器,今天学习 ...

  6. 小白必看的cmd简单代码!(图片看不到的可复制 粘贴到Typroa进行观看)

    打卡cmd的方法 直接window加r 输入cmd 在下方菜单 找到window标志,打开 输入命令提示符 更高级的cmd权限使用:右键命令提示符,点击"以管理员身份运行" 一些简 ...

  7. FDMemtable如何增加一条自身复制的记录

    procedure TFrame_Bill.CopyARecord; var lAFDmemtable : TFDMemTable; begin {$REGION '增加一条复制的记录'} try l ...

  8. Postwoman教程

    1.安装 打开git或cmder,输入如下命令: cd d:/GitDemo/ git clone https://github.com/liyasthomas/postwoman cd postwo ...

  9. 初学嵌入式是弄linux还是单片机?

    作为一个从机械转行到嵌入式的工程师,我深刻理解初学者面临的困惑.嵌入式领域分支众多,初期选择Linux还是单片机确实是个让人纠结的问题.我当年就在这个问题上纠结了好久,走了不少弯路. 其实,我之所以能 ...

  10. Asp.net mvc基础(九)使用DropDownList下拉列表

    第一种下拉列表写法: 后端 前端 第二种下拉列表写法: 使用Html辅助方法@Html.DropDownList("名称","List<SelectListItem ...