All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.sdn.api.utils.ObjectToMap Maven / Gradle / Ivy

The newest version!
package org.sdn.api.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 对象属性转成map
 * 

* Bean 转Map对象 set get方法 * * @author:fulong * @create:2018/11/16 17:48. */ public class ObjectToMap { private static Logger logger = LoggerFactory.getLogger(ObjectToMap.class); /** * 类属性缓存 */ private static final ConcurrentHashMap, Field[]> CLASS_CACHE = new ConcurrentHashMap<>(64); public static Map objectToMap(Object obj) throws Exception { if (obj == null) { return null; } Map map = new HashMap<>(); 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; } /** * Bean对象属性转换成 map * * @param obj * @return */ public static Map toMap(Object obj) { Field[] fields = getFields(obj); if (Objects.isNull(fields)) { return null; } int size = (int) Math.ceil((fields.length) / 0.75); Map params = new HashMap<>(size); for (Field field : fields) { try { String name = field.getName(); //不是get方法时,不进行获取 Object value = field.get(obj); if (Objects.isNull(value)) { continue; } params.put(name, value); } catch (Exception e) { logger.info(" ObjectToMap toMap() Exception error={}",e); } } return params; } /** * 获取到属性 该方法不处理父类属性 * * @param obj * @return */ private static Field[] getFields(Object obj) { if (Objects.isNull(obj)) { return null; } //获得类 Class clazz = obj.getClass(); Field[] fields = CLASS_CACHE.get(clazz); if (fields != null) { return fields; } // 获取实体类的所有属性信息,返回Field数组 fields = clazz.getDeclaredFields(); CLASS_CACHE.putIfAbsent(clazz, fields); for (Field field : fields) { field.setAccessible(true); } return fields; } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy