看项目中需要实体类转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的更多相关文章

  1. 利用JAXB实现java实体类和xml互相转换

    1.应用场景 在使用WebService实现数据上传下载,数据查询时,可以利用JAXB实现java实体类和xml互相转换 2.Demo 2.1 student.java 实体类,包含list(set同 ...

  2. C#实体类生成XML与XML Schema文档

    一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...

  3. 简单实体类和xml文件的相互转换

    最近写一个题目,要求将一组员工实体类转换成xml文件,或将xml文件转换成一组实体类.题目不难,但写完感觉可以利用泛型和反射将任意一个实体类和xml文件进行转换.于是今天下午立马动手 试了下,做了个简 ...

  4. 使用C#实现实体类和XML相互转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...

  5. 实现实体类和Xml相互转化

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  6. C#实体类与XML相互转换

    1.实体类与XML相互转换 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化. 把XML转换成相应的实体类,需要使用到XmlSerializer类的De ...

  7. C# 实现实体类和Xml转换

    一.实体类转换成XML 将实体类转换成XML需要使用XmlSerializer类的Serialize方法,将实体类序列化 public static string XmlSerialize<T& ...

  8. NHibernate生成实体类、xml映射文件

    最近工作电脑装完win10后,之前使用的codeSmith安装不了,索性自己写一个. 界面比较简单,如下图: 第一行为Oracle数据库的连接字符串.连接成功后,填充表到第4行的下拉列表中. 第二行为 ...

  9. C#序列化s实体类成Xml,去除空格、换行符以及命名空间

    序列化实体类成为一个干净的Xml,不带空格.换行符以及命名空间 /// <summary> /// 序列化成XML /// </summary> /// <typepar ...

随机推荐

  1. 拿不到offer?阿里HR教你简历应该这样写

    首先,要明白公司看重的是你的什么?为什么要聘请你?当然是看重你的能力,聘请你来是要来干活的. 都知道简历是敲门砖,那么这一块砖要怎么才能敲得响,怎么才能敲得开大厂的门. 1 能力萃取!什么是能力萃取? ...

  2. Python 简明教程 --- 25,Python 目录操作

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 做技术一定要一颗恒心,这样才不会半途而废. 目录 上一节我们介绍了文件相关的操作,本节我们来介绍目录 ...

  3. SOLID:面向对象设计的前五项原则

    S.O.L.I.D是Robert C. Martin提出的前五个面向对象设计(OOD)原则的首字母缩写,他更为人所熟知的名字是Uncle Bob.   将这些原理结合在一起,可使程序员轻松开发易于维护 ...

  4. amazeui 验证按钮扩展

    做一个发送验证码按钮,点击后要60秒之后才能再次点击,利用原有的amazeui样式做的一些扩展,当然主题功能的代码全都是自己写的,也可以脱离amazeUi 自己完成这个功能按钮 代码如下: <! ...

  5. 不使用字体图标和图片,只使用css如何做出展开收起的效果

    <i class="iconArrow" :class="[ littleNavState === item.meta.id ? 'arrowOpen' : '' ...

  6. smartSVN9.2.2 for mac 安装与破解

    原文链接:https://www.jianshu.com/p/bb87154e0459 近段时间使用svn进行项目管理,开始使用的是cornerstone,但是用过程中出现一个操作Bug,一.在xco ...

  7. 那些年拿过的shell之springboot jolokia rce

    日穿扫描扫到一个spring boot actuator 可以看到有jolokia这个端点,再看下jolokia/list,存在type=MBeanFactory 关键字 可以使用jolokia-re ...

  8. PHP chop() 函数

    实例 移除字符串右侧的字符: <?php$str = "Hello World!";高佣联盟 www.cgewang.comecho $str . "<br& ...

  9. CMD使用笔记

    CMD杂谈 基本功: 1,列出所有任务及进程号,杀进程   tasklist tasklist /? 获取使用帮助 taskkill taskkill /? 获取使用帮助   2,cd 切换目录 cd ...

  10. MB2-718 Certification: (Microsoft Dynamics 365 Customer Service) – Field Service, Customer Assets

    Come from : https://neilparkhurst.com/2018/02/25/mb2-718-certification-microsoft-dynamics-365-custom ...