Xml Entity 实体互转(XStream)
http://x-stream.github.io/tutorial.html
项目中用了 JAXB 方式 Xml Entity 实体互转(JAXB)
实体:
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.basic.BooleanConverter; import java.io.Serializable;
import java.util.Date; /**
* 患者基本信息
*/
@XStreamAlias("PatientInfo")
public class PatientInfoVo implements Serializable { /**
* 患者ID
*/
private String patientId; /**
* 患者信息
*/
@XStreamAlias("PAT_NAME")
private String patientName; /**
* 患者性别
*/
@XStreamAlias("PatientGender")
@XStreamConverter(value= BooleanConverter.class,booleans={false},strings={"男","女"})
private Boolean gender; /**
* 出生日期
*/
@XStreamAlias("DATE_BIRTH")
private Date patientBirthdate; /**
*
*/
@XStreamAlias("MedicalType")
//@XStreamConverter(value= EnumToStringConverter.class,ints={1},strings={"门诊","急诊","住院"}) //TODO 待解决
private Integer medicalType; public String getPatientId() {
return patientId;
} public void setPatientId(String patientId) {
this.patientId = patientId;
} public String getPatientName() {
return patientName;
} public void setPatientName(String patientName) {
this.patientName = patientName;
} public Date getPatientBirthdate() {
return patientBirthdate;
} public void setPatientBirthdate(Date patientBirthdate) {
this.patientBirthdate = patientBirthdate;
} public Boolean getGender() {
return gender;
} public void setGender(Boolean gender) {
this.gender = gender;
} public Integer getMedicalType() {
return medicalType;
} public void setMedicalType(Integer medicalType) {
this.medicalType = medicalType;
} @Override
public String toString() {
return "PatientInfoVo{" +
"patientId='" + patientId + '\'' +
", patientName='" + patientName + '\'' +
", gender=" + gender +
", patientBirthdate=" + patientBirthdate +
", medicalType=" + medicalType +
'}';
}
}
Test代码
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.basic.DateConverter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest; import java.util.Date;
import java.util.TimeZone; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class XmlTests {
Logger logger = LoggerFactory.getLogger(this.getClass()); /**
* 玩得不熟,没有拼字符串来得直接
*/
@Test
void entityToxmlTest() {
PatientInfoVo info = new PatientInfoVo();
info.setPatientId("这个没添加注解");
info.setPatientName("张三");
info.setGender(false);
info.setMedicalType(1); //TODO 待转成应对的汉字
info.setPatientBirthdate(new Date()); //将实体转成XML
XStream xStream = new XStream(new DomDriver());
//使用注解转换
xStream.processAnnotations(PatientInfoVo.class);
//xstream.registerConverter();
//时间格式化后输出,默认没有 yyyy-MM-dd HH:mm:ss,注意时区也要调整
xStream.registerConverter(new DateConverter("yyyy-MM-dd HH:mm:ss", new String[]{"yyyy-MM-dd HH:mm:ss"}, TimeZone.getTimeZone("GMT+8")));
xStream.alias("Patient", PatientInfoVo.class);
String xml = xStream.toXML(info);
logger.info("\r\n" + xml);
} /**
* 反转还行,挺方便,复杂的结构可以参考一些其它资料
*/
@Test
void xmlToEntityTest() {
String xml = "<PatientInfo>\n" +
" <patientId>这个没添加注解</patientId>\n" +
" <PAT__NAME>张三</PAT__NAME>\n" +
" <PatientGender>女</PatientGender>\n" +
" <DATE__BIRTH>2021-10-22 10:13:40</DATE__BIRTH>\n" +
" <MedicalType>1</MedicalType>\n" +
"</PatientInfo>"; //将实体转成XML
XStream xStream = new XStream(new DomDriver());
//使用注解转换
xStream.processAnnotations(PatientInfoVo.class);
//默认的不支持 yyyy-MM-dd HH:mm:ss 需要格式化一下
xStream.registerConverter(new DateConverter("yyyy-MM-dd HH:mm:ss", new String[]{"yyyy-MM-dd HH:mm:ss"}, TimeZone.getTimeZone("GMT+8")));
PatientInfoVo user = (PatientInfoVo) xStream.fromXML(xml); logger.info(user.toString());
}
}
Xml Entity 实体互转(XStream)的更多相关文章
- Java实现XML和JavaBean互转 - XStream
1.简介 XStream是一个序列化JavaBean为XML文件以及反序列化的工具. 2.准备 2.1.XML回顾 在学习这部分内容前,假设你对XML以及有一定的了解,至少能够分辨出XML的元素.属性 ...
- JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法. 这2种方式都可以实现不用persist ...
- XXE(XML External Entity attack)XML外部实体注入攻击
导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...
- XStream进行xml和bean互转
加入pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>x ...
- C#.NET XML 与 实体 MODEL 互转,非序列化
只能处理简单结构XML 和 实体. using System.Text; using System.Xml; namespace A.Util { public static class MyXmlU ...
- 打造完美的xml技术解决方案(dom4j/xstream)
转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...
- XML 和 List 互转类
XML 和 List 互转类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- 简单两步快速学会使用Mybatis-Generator自动生成entity实体、dao接口和简单mapper映射(用mysql和oracle举例)
前言: mybatis-generator是根据配置文件中我们配置的数据库连接参数自动连接到数据库并根据对应的数据库表自动的生成与之对应mapper映射(比如增删改查,选择性增删改查等等简单语句)文件 ...
- Json、JavaBean、Map、XML之间的互转
思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...
- XML外部实体注入漏洞(XXE)
转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...
随机推荐
- [WPF]标记扩展(Markup Extension)
XAML是基于XML的语言,其遵循并扩展了XML的语法规则.其中一项扩展就是标记扩展(Markup Extension),比如我们经常使用的绑定Binding和x:Type. 什么是标记扩展 标记扩展 ...
- Spyder5老是闪退报错 "Blowfish has been deprecated "的解决方法
目录 一.前言 我的运行环境 二.解读报错 三.解决方法 四.打开spyder5 一.前言 本人在学习python时图省事选择直接安装Anaconda3,用spyder5来进行学习,可是比较蛋疼的是安 ...
- 手动部署Kraft模式Kafka集群
手动部署Kraft模式kafka集群 基本信息 IP地址 Hostname Release Kafka-Version 172.29.145.157 iamdemo1 Centos7.9 kafka_ ...
- 深入解析C# List<T>的源码
前面的文章中解释了Array的初始化和元素插入,以及数组整体的存储结构(<深度分析C#中Array的存储结构>).这里我们再来详细的了解另一种存储结构List<T>, List ...
- Redis缓存使用技巧和设计方案?薪火数据知识库
Redis是一种开源的内存数据库,被广泛应用于缓存系统设计和实现中.它提供了高性能.低延迟的数据访问,并支持多种数据结构和丰富的功能.下面将详细介绍Redis缓存的使用技巧和设计方案. 一.Redis ...
- ij社区版如何创建spring项目
他们说是使用spring init什么什么的,那个都是老版的名称了,你去插件里面搜找是肯定搜不到的,现在叫spring boot helper,用这个,安装一下就好了(注意本次是在2022/11/1 ...
- [CF1824D] LuoTianyi and the Function
题目描述 LuoTianyi gives you an array $ a $ of $ n $ integers and the index begins from $ 1 $ . Define $ ...
- liunx系统sed命令使用
增 sed '$行数i 新增内容' 文件名在文件里某行上面新增内容 sed '$行数a 新增内容' 文件名在文件里某行下面新增内容 -i.bak对源文件进行修改并备份修改之前源文件 #在文件里第5行上 ...
- C++学习笔记二:变量与数据类型(整型)
1.int(整型数据): 1.1 进制的表示:十进制,八进制,16进制,二进制 int number1 = 15; // Decimal int number2 = 017; // Octal int ...
- keycloak~对接login-status-iframe页面判断用户状态变更
上次我们说了,keycloak的login-status-iframe页面的作用,并解决了跨域情况下,iframe与主页面数据传递的方法,这一次,我们主要分析login-status-iframe.h ...