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声 ...
随机推荐
- UNCTF-Crypto wp
2020年 easy_rsa 题目 from Crypto.Util import number import gmpy2 from Crypto.Util.number import bytes_t ...
- 瀑布图有什么作用?除了excel如何快速制作?
瀑布图是一种特殊的数据可视化图表,具有以下作用: 1. 对比变化:瀑布图可以清晰地展示数据在不同因素作用下的变化情况.通过将数据分解成各个组成部分,并以阶梯状呈现,可以直观地对比每个因素对总体结果的影 ...
- 本地数据备份与FTP远程数据迁移
数据是电脑中最重要的东西.为了保证数据安全,我们经常会对数据进行备份.之前一直采用将重要数据拷贝至移动硬盘的方式实现备份,实现简单但每次都需要把所有文件拷贝一次,当文件很大时效率较低. 因此,考虑使用 ...
- springMvc_控制台中文乱码问题
Post方法解决控制台乱码 @Override protected Filter[] getServletFilters() { CharacterEncodingFilter filter = ne ...
- Chat2DB接入文心一言AI教程(原创教程,转载请注明)
引言 关于Chat2DB和文心一言是啥我就不赘述了,由于Chat2DB自带的ai有调用次数限制,所以想着接入百度的文心AI,但是由于网上没有找到相关的教程,此教程是本人研究了很久才弄出来的,顺便记录一 ...
- 使用SPEL自定义表达式
自定义表达式 Spring提供了一个可以自定义表达式的接口 package com.qbb.qmall.item; import org.junit.Test; import org.springfr ...
- Kernel Memory 入门系列:文档预处理
Kernel Memory 入门系列:文档预处理 Embedding为我们提供了问题理解和文档检索的方法,但是面对大量的文档,如果在用于提问的时候再进行文档的Embedding的话,那这个过程是非常耗 ...
- Scrapy爬虫文件代码基本认识和细节解释
import scrapy from scrapy.http.request import Request from scrapy.http.response.html import HtmlResp ...
- 聊聊ChatGLM6B的微调脚本及与Huggingface的关联
本文首先分析微调脚本trainer.sh的内容,再剖析ChatGLM是如何与Huggingface平台对接,实现transformers库的API直接调用ChatGLM模型,最后定位到了ChatGLM ...
- (转)Harbor 启用镜像扫描功能方法
A demo environment with the latest Harbor stable build installed. For additional information please ...