Xml Entity 实体互转(XStream)

简介: 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 Java 数据库连接
Mybatis使用generator逆向工程生成器生成entity、mapper、.xml模版类
今天将表建好了,但是一个一个的建实体类、Mapper接口、Mapper.xml文件就十分的麻烦,所以我就想到了MyBatis逆向,今天就操作一把!这里我们采用maven来进行操作。
228 0
|
2天前
|
XML 安全 网络协议
Xxe外部实体注入(XML External Entity Injection)
Xxe外部实体注入(XML External Entity Injection)
|
2月前
|
XML 数据格式
Xml Entity 实体互转(JAXB)
Xml Entity 实体互转(JAXB)
47 0
|
XML Java 数据格式
JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
原文:JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法 在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法。
926 0
|
XML Java 数据库连接
沫沫金-Mybatis工具类,生成dao层xml、mapper文件和实体类entity层
Mybatis Generator工具使用起来,总感觉不太灵活加上初次环境配置麻烦,特编写java文件 单文件不依赖,直接生成。源码如下(此为Oracle数据库版) package net.
833 0
|
XML Java 数据格式
JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法
原文地址:http://www.cnblogs.com/taven/p/3351841.html JPA 不在 persistence.xml 文件中配置每个Entity实体类的2种解决办法 在Spring 集成 Hibernate 的JPA方式中,需要在persistence配置文件中定义每一个实体类,这样非常地不方便,远哥目前找到了2种方法。
778 0
|
XML 安全 应用服务中间件
Multiple Adobe Products - XML External Entity And XML Injection Vulnerabilities
   (    , )     (,  .   `.' ) ('.    ',   ). , ('.
840 0