• 实体类转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>
    
  • 相关阅读:
    第二次结对编程作业——毕设导师智能匹配
    第二次作业——结对项目之需求分析与原型设计(1.0)
    调研《构建之法》指导下的全国高校的历届软工实践作品、全国互联网+竞赛、物联网竞赛等各类全国性大学生信息化相关的竞赛平台的历届作品
    软件工程的实践项目课程的自我目标
    CMake
    软件工程实践总结
    软件产品案例分析(K米 APP)
    毕设导师智能匹配
    结对项目之需求分析与原型设计(导师选择)
    调研《构建之法》指导下的软工实践作品
  • 原文地址:https://www.cnblogs.com/zhenghengbin/p/13517948.html
Copyright © 2020-2023  润新知