看项目中需要实体类转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. vsCode的一些个人配置

    本文主要用来记录我在使用vsCode中的一些个人习惯设置. 编辑器主题配置 主题我是用的是 escook-theme,这是我在看某视频教程时发现的一款看起来非常友好的vsCode主题. 文件图标主题 ...

  2. [日常摘要] -- zookeeper篇

    概览 设计目标 是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用 简介 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于Z ...

  3. websphere8.5配置db2数据源

    websphere8.5配置db2数据源 1. 打开websphere控制台  2.进入websphere变量页面  3. 进入DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH变 ...

  4. 一文带你学习DWS数据库用户权限设计与管理

    前言 本文将介绍DWS基于RBAC(Role-Based Access Control,基于角色的访问控制)的数据库用户权限管理.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成 ...

  5. Bootstrap++:bootstrap-select 使用

    效果图: HTML: <!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.or ...

  6. SQL数据库优化总结

    1.在表中建立索引优先考虑 where.group by使用到的数据. 2.查询的sql语句中不要使用select * ,因为会返回许多无用的字段降低查询的效率,应该使用具体的字段代替*,只返回使用到 ...

  7. 五天一体_企业权限管理(SSM整合)

    学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...

  8. 架构师写的BUG,非比寻常

    部门新来了个架构师,BAT背景,住在三环,开宝马上班,有车位. 小伙话不多,但一旦说话斩钉截铁,带着无法撼动的自信.原因就是,有他着数亿高并发经验,每一秒钟的请求,都是其他企业运行一年也无法企及的.这 ...

  9. PHP str_ireplace() 函数

    实例 把字符串 "Hello world!" 中的字符 "WORLD"(不区分大小写)替换成 "Peter": <?php高佣联盟 w ...

  10. 找回 Virtuoso 中的缩放和角度

    https://www.cnblogs.com/yeungchie/ 打开要缩放的版图 CIW 中运行:dbCreateXformPCell(geGetEditCellView() geGetEdit ...