实体类转xml
看项目中需要实体类转xml,大家是拼接的。感觉可以利用反射实现。于是写了下
代码如下
package com.kevin.util;
import org.springframework.util.ObjectUtils;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
/**
* @description: 实体类转xml
* @author: kevin
* @create: 2020-08-17 08:50
*/
public class EntityToXml {
public static String entityToXml(Object obj) {
StringBuilder xml = new StringBuilder();
xml.append("\"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\"?><root>");
try {
Class<?> aClass = obj.getClass();
Field[] fields = aClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String name = field.getName();
name = name.substring(0, 1).toUpperCase() + name.substring(1);
Object o = ObjectUtils.isEmpty(field.get(obj)) ? "" : field.get(obj);
Class<?> curFieldType = field.getType();
xml.append("<").append(name).append(">");
if (curFieldType.equals(List.class)) {
getListXMl(xml, field, (List) o);
} else {
xml.append(o);
}
xml.append("</").append(name).append(">");
}
} catch (IllegalAccessException e) {
//todo 这里记录异常
}
xml.append("</root>");
return xml.toString();
}
private static StringBuilder getListXMl(StringBuilder xml, Field field, List o) throws IllegalAccessException {
Type genericType = field.getGenericType();
if (null == genericType) {
return xml;
}
if (genericType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) genericType;
// 得到泛型里的class类型对象
Class<?> actualTypeArgument = (Class<?>) pt.getActualTypeArguments()[0];
List<Object> lists = o;
Field[] declaredFields = actualTypeArgument.getDeclaredFields();
for (Object list : lists) {
xml.append("<row>");
for (Field declaredField : declaredFields) {
declaredField.setAccessible(true);
String rowName = declaredField.getName();
rowName = rowName.substring(0, 1).toUpperCase() + rowName.substring(1);
Object rowValue = ObjectUtils.isEmpty(declaredField.get(list)) ? "" : declaredField.get(list);
xml.append("<").append(rowName).append(">").append(rowValue).append("</").append(rowName).append(">");
}
xml.append("</row>");
}
}
return xml;
}
}
测试
@Test
public void entityToXml() {
QueryDrugListVO queryDrugListVO = new QueryDrugListVO();
queryDrugListVO.setBlDrugName("a");
queryDrugListVO.setId(1);
QueryDrugListReq req = new QueryDrugListReq();
req.setBigKindName("大佬");
QueryDrugListReq req1 = new QueryDrugListReq();
req1.setBigKindName("大佬1");
List<QueryDrugListReq> reqs = new ArrayList<>();
reqs.add(req);
reqs.add(req1);
queryDrugListVO.setOrders(reqs);
String s = EntityToXml.entityToXml(queryDrugListVO);
System.out.println(s);
}
输出结果:
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><Id>1</Id><BlDrugName>a</BlDrugName><SpecValue></SpecValue><MinPackageUnit></MinPackageUnit><Orders><row><FirstKindCode></FirstKindCode><BigKindName>大佬</BigKindName><BigKindState></BigKindState><PageNumber></PageNumber><PageSize></PageSize></row><row><FirstKindCode></FirstKindCode><BigKindName>大佬1</BigKindName><BigKindState></BigKindState><PageNumber></PageNumber><PageSize></PageSize></row></Orders></root>
实体类转xml的更多相关文章
- 利用JAXB实现java实体类和xml互相转换
1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...
- C#实体类生成XML与XML Schema文档
一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...
- 简单实体类和xml文件的相互转换
最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...
- 使用C#实现实体类和XML相互转换
一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...
- 实现实体类和Xml相互转化
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- C#实体类与XML相互转换
1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...
- C# 实现实体类和Xml转换
一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...
- NHibernate生成实体类、xml映射文件
最近工作电脑装完win10后,之前使用的codeSmith安装不了,索性自己写一个. 界面比较简单,如下图: 第一行为Oracle数据库的连接字符串.连接成功后,填充表到第4行的下拉列表中. 第二行为 ...
- C#序列化s实体类成Xml,去除空格、换行符以及命名空间
序列化实体类成为一个干净的Xml,不带空格.换行符以及命名空间 /// <summary> /// 序列化成XML /// </summary> /// <typepar ...
随机推荐
- Module not found: Error: Can't resolve './style':配置 extensions 的坑
ERROR in ./src/index.js Module not found: Error: Can't resolve './style' in 'D:\gitcode\github\learn ...
- 剑指offo记录
一.二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是 ...
- spring学习(五)详细介绍AOP
AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待 它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封 ...
- php实现导出数据分类合并单元格功能
<?php $conn = mysql_connect("localhost","root","root"); $db = mysql ...
- 二手99新iPhone8Plus有锁移动联通版
原文是维基百科:http://www.bosimedia.com/wiki/IPhone_8#cite_note-1 iPhone8Plus详细介绍 iPhone 8与iPhone 8 Plus 是苹 ...
- 自述:自学Java应该注意什么问题?
Hello,大家好,我是若风,我是一名IT从业者,纵观当今局势,国内IT互联网行业发展是比较好的,当然学IT技术的人员也特别多,网上的学习资源也非常多,现在有很多人在学技术,想想要进入到 IT这个行业 ...
- PHP timezone_identifiers_list() 函数
------------恢复内容开始------------ 实例 输出非洲的所有时区: <?phpprint_r(timezone_identifiers_list(1));?> 运行实 ...
- luogu P5410 模板 扩展 KMP Z函数 模板
LINK:P5410 模板 扩展 KMP Z 函数 画了10min学习了一下. 不算很难 思想就是利用前面的最长匹配来更新后面的东西. 复杂度是线性的 如果不要求线性可能直接上SA更舒服一点? 不管了 ...
- mongoDB数据库原生配置
最近小冷在工作中使用到了mongoDB数据库,所以就简单的写了个demo,和大家简单分享下,如果大家也有想分享的东西或者需要分享的东西,生活或者其他都行,可以关注小冷公众号秦川以北或者加小冷微信qxy ...
- 网络安全 - SSL/TLS协议运行机制的概述
大学时也系统学过相关的网络安全,但那时并没有理论联系实践,稀里糊涂的,现在才意识到所学的东西都是好东西,可惜已晚. 来自http://www.ruanyifeng.com/blog/2014/02/s ...