BeanMapxml相互转换的几种方式

Posted DragonetYu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BeanMapxml相互转换的几种方式相关的知识,希望对你有一定的参考价值。

直接上代码


/** 
 * 使用org.apache.commons.beanutils进行转换 
 */  
class A {  
      
    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    
        if (map == null)  
            return null;  
  
        Object obj = beanClass.newInstance();  
  
        org.apache.commons.beanutils.BeanUtils.populate(obj, map);  
  
        return obj;  
    }    
      
    public static Map<?, ?> objectToMap(Object obj) {  
        if(obj == null)  
            return null;   
  
        return new org.apache.commons.beanutils.BeanMap(obj);  
    }    
      
}  
  
/** 
 * 使用Introspector进行转换 
 */  
class B {  
  
    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    
        if (map == null)   
            return null;    
  
        Object obj = beanClass.newInstance();  
  
        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());    
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();    
        for (PropertyDescriptor property : propertyDescriptors) {  
            Method setter = property.getWriteMethod();    
            if (setter != null) {  
                setter.invoke(obj, map.get(property.getName()));   
            }  
        }  
  
        return obj;  
    }    
      
    public static Map<String, Object> objectToMap(Object obj) throws Exception {    
        if(obj == null)  
            return null;      
  
        Map<String, Object> map = new HashMap<String, Object>();   
  
        BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());    
        PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();    
        for (PropertyDescriptor property : propertyDescriptors) {    
            String key = property.getName();    
            if (key.compareToIgnoreCase("class") == 0) {   
                continue;  
            }  
            Method getter = property.getReadMethod();  
            Object value = getter!=null ? getter.invoke(obj) : null;  
            map.put(key, value);  
        }    
  
        return map;  
    }    
      
}  
  
/** 
 * 使用reflect进行转换 
 */  
class C {  
  
    public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {    
        if (map == null)  
            return null;    
  
        Object obj = beanClass.newInstance();  
  
        Field[] fields = obj.getClass().getDeclaredFields();   
        for (Field field : fields) {    
            int mod = field.getModifiers();    
            if(Modifier.isStatic(mod) || Modifier.isFinal(mod)){    
                continue;    
            }    
  
            field.setAccessible(true);    
            field.set(obj, map.get(field.getName()));   
        }   
  
        return obj;    
    }    
  
    public static Map<String, Object> objectToMap(Object obj) throws Exception {    
        if(obj == null){    
            return null;    
        }   
  
        Map<String, Object> map = new HashMap<String, Object>();    
  
        Field[] declaredFields = obj.getClass().getDeclaredFields();    
        for (Field field : declaredFields) {    
            field.setAccessible(true);  
            map.put(field.getName(), field.get(obj));  
        }    
  
        return map;  
    }   
}  
 
import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XMLParser {

    public static <T> T getObjectFromXML(String xml,Class<T> clazz){
        T obj;
        try {
            obj = clazz.newInstance();
        } catch (InstantiationException | IllegalAccessException e1) {
            e1.printStackTrace();
            return null;
        }
        try {
            SAXReader reader = new SAXReader();
            Document doc;
            doc = reader.read(new ByteArrayInputStream(xml.getBytes("UTF-8")));
//            doc = reader.read(responseString);
            Element root = doc.getRootElement();
            List<Element> list = root.elements();
            Field field;
            for (Element element : list) {
                try {
                    field = clazz.getDeclaredField(element.getName());
                    field.setAccessible(true);
                    field.set(obj, element.getText());
                } catch (Exception e) {
                }
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return obj;
    }
    public static Map<String, Object> getMapFromXML(String responseString) {
        Map<String, Object> map = new HashMap<String, Object>();
        try {
            SAXReader reader = new SAXReader();
            Document doc;
            doc = reader.read(new ByteArrayInputStream(responseString.getBytes("UTF-8")));
//            doc = reader.read(responseString);
            Element root = doc.getRootElement();
            List<Element> list = root.elements();
            for (Element element : list) {
                map.put(element.getName(), element.getText());
            }
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return map;
    }

    public static String getXmlStringFromMap(Map<String, Object> map){
        StringBuffer buffer = new StringBuffer();
        buffer.append("<xml>");
        for (String key : map.keySet()) {
            buffer.append("<").append(key).append(">")
            .append("<![CDATA[")
            .append(String.valueOf(map.get(key)))
            .append("]]>")
            .append("</").append(key).append(">");
        }
        buffer.append("</xml>");
        return buffer.toString();
    }
}

 

以上是关于BeanMapxml相互转换的几种方式的主要内容,如果未能解决你的问题,请参考以下文章

Json字符串与Object对象相互转换的几种方式

Json字符串与Object对象相互转换的几种方式

Json字符串与Object对象相互转换的几种方式

前台 JSON对象转换成字符串 相互转换 的几种方式

总结vue中组件相互传值的几种方式

一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式