实体类转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 ...
随机推荐
- 年薪50W京东软件测试工程师的成长路——我们都曾一样迷茫
这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经 ...
- Redis Desktop Manager安装
Windows安装: 1.下载安装包 官网下载地址:https://redisdesktop.com/pricing 官网下载需要付费使用 再此附上一个免费的破解版本,绿色安全可用 链接:https: ...
- 关于C# winform唤起本地已安装应用程序(测试win10,win7可用)
想要唤起本地已安装应用程序,我想到的有三种可行的方法: 第一种就是打开本地的快捷方式(有的应用可能没有快捷方式,但这种方法效率最高,可配合其他方法使用),快捷方式分为本地桌面快捷方式和开始菜单中的快捷 ...
- vue-watch : 深度监控的语法格式--检测数据的tabledata这个数组的变化
watch:{ tableData:{ handler(a,b){ this.tableData= a; console.log(a ,b) }, deep:true }, }
- python下载及安装方法
打开 http://www.python.org 找到Downlodas 点击windows 下载安装
- 使用jwt进行token认证
简单说明:最近在搞权限这一块的东西,需要用到jwt进行token认证,才有了如下的demo演示 具体细节可以看gitbug,噗,不是bug是hub github地址:https://github ...
- switch的一些思考(seitch与ifelse的区别)
参考博客: https://www.cnblogs.com/balingybj/p/5751707.html Switch的思考 Switch与If--else的比较 switch...case与i ...
- Python os.unlink() 方法
概述 os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误.高佣联盟 www.cgewang.com 语法 unlink()方法语法格式如下: os.unlink(path) 参 ...
- Python List remove()方法
描述 remove() 函数用于移除列表中某个值的第一个匹配项.高佣联盟 www.cgewang.com 语法 remove()方法语法: list.remove(obj) 参数 obj -- 列表中 ...
- PHP utf8_decode() 函数
定义和用法 utf8_decode() 函数把 UTF-8 字符串解码为 ISO-8859-1.高佣联盟 www.cgewang.com 该函数把通过 utf8_encode() 函数编码的 ISO- ...