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)的更多相关文章

  1. Java实现XML和JavaBean互转 - XStream

    1.简介 XStream是一个序列化JavaBean为XML文件以及反序列化的工具. 2.准备 2.1.XML回顾 在学习这部分内容前,假设你对XML以及有一定的了解,至少能够分辨出XML的元素.属性 ...

  2. JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法

    在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法.   这2种方式都可以实现不用persist ...

  3. XXE(XML External Entity attack)XML外部实体注入攻击

    导语 XXE:XML External Entity 即外部实体,从安全角度理解成XML External Entity attack 外部实体注入攻击.由于程序在解析输入的XML数据时,解析了攻击者 ...

  4. XStream进行xml和bean互转

    加入pom <dependency> <groupId>com.thoughtworks.xstream</groupId> <artifactId>x ...

  5. C#.NET XML 与 实体 MODEL 互转,非序列化

    只能处理简单结构XML 和 实体. using System.Text; using System.Xml; namespace A.Util { public static class MyXmlU ...

  6. 打造完美的xml技术解决方案(dom4j/xstream)

    转: XML 技术是随着 Java 的发展而发展起来的.在 XML 出现之前对于简单的数据格式通常是存储在 ini 配置文件等文本文件中,复杂的格式则采用自定义的文件格式,因此对于每种文件格式都要有专 ...

  7. XML 和 List 互转类

    XML 和 List 互转类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  8. 简单两步快速学会使用Mybatis-Generator自动生成entity实体、dao接口和简单mapper映射(用mysql和oracle举例)

    前言: mybatis-generator是根据配置文件中我们配置的数据库连接参数自动连接到数据库并根据对应的数据库表自动的生成与之对应mapper映射(比如增删改查,选择性增删改查等等简单语句)文件 ...

  9. Json、JavaBean、Map、XML之间的互转

    思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...

  10. XML外部实体注入漏洞(XXE)

    转自腾讯安全应急响应中心 一.XML基础知识 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声 ...

随机推荐

  1. Jail 【Python沙箱逃逸问题合集】

    借助NSS平台题目,以2022年HNCTF为例展开分析 背景: 由于目前很多赛事有时候会出现一些pyjail的题目,因此在这里总结一下以便以后遇见可以轻松应对. 注:由于Python3中的unicod ...

  2. Cassandra中的MerkleTree反熵机制

    构建MerkleTree Cassandra 是一个分布式数据库系统,它使用 Merkle 树来实现数据一致性和数据完整性的验证. 在 Cassandra 中,每个节点都维护着自己的数据副本.为了确保 ...

  3. 明解Java第一章练习题答案

    @ 目录 练习1-1 练习1-2 练习1-3 <明解Java>书籍其他章节答案 练习1-1 如果没有表示程序语句末尾的分号,结果会怎么样呢?请编译程序进行确认. 答:编译器报错 练习1-2 ...

  4. 七天.NET 8操作SQLite入门到实战 - 第六天后端班级管理相关接口完善和Swagger自定义配置

    前言 在上一章节我们在后端框架中引入 SQLite-net ORM 并封装常用方法(SQLiteHelper),今天我们的任务是设计好班级管理相关的表.完善后端班级管理相关接口并对Swagger自定义 ...

  5. [USACO2007NOVS] Best Cow Line S

    题目描述 Farmer John 打算带领 \(N\)(\(1 \leq N \leq 2\,000\))头奶牛参加一年一度的"全美农场主大奖赛".在这场比赛中,每个参赛者必须让他 ...

  6. Python 潮流周刊第 31 期(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  7. SpringCloudGateway解决跨域问题

    1.跨域问题详情 2.为什么会跨域? 官方定义:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS 怎么出现的? 1.浏览器访问了一个业务 h ...

  8. Net 高级调试之十四:线程同步的基础知识和常见的同步原语

    一.介绍 今天是<Net 高级调试>的第十四篇文章,这篇文章我们主要介绍和线程相关的内容,当然不是教你如何去写多线程,更不会介绍多线程的使用方法和API,今天,我们主要讲一下锁,一说到多线 ...

  9. 组合式api-侦听器watch的语法

    和vue2对比,也是语法上稍有不同. 监听单个数据对象 <script setup> import {ref, watch} from "vue"; const cou ...

  10. 【C#】【IO】【实例】统计多个文件夹下的图片

    因工作需要繁琐的进行同一目录多个文件夹下的图片统计,便使用代码来解决. 需求:统计的是多少个文件夹包含了图片,并非是统计有多少张图. 我们先用Python来创建一个现场环境(巩固巩固py知识): 1 ...