跳到主要内容

实体转Map工具类

·476 字·1 分钟

利用反射实现实体转map工具类

开发时会遇到将实体转成map,或将实体的部分字段转成map的需求,挨个字段set值显得比较臃肿,遂编写如下工具类实现实体转map功能。

  • 1.实体全部字段转为map

  • 2.忽略实体部分字段转为map

package com.neusoft.sl.ehrss.nm.labour.centerWebService.utils;

import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author anarkh
 * @date 2020/12/1 16:39
 * @description  实体转map
 */
public class EntityConvertMap {
    static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    
    /**
     * 
     * @param obj
     * @return map
     * @description  实体转map
     * @example	
     * 	Map<String, Object> map = new HashMap<String, Object>();
     * 	CC02 cc02 = (CC02) rslist.get(0);
     * 	map = EntityConvertMap.convertEntityToMap(cc02);
     * 
     */
    public static Map<String, Object> convertEntityToMap(Object obj){

        Map<String, Object> map = new HashMap<String, Object>();
        Class<?> clazz = obj.getClass();
        //获取实体类中所有属性的值
        Field[] fields = clazz.getDeclaredFields();
        for(Field field:fields){
            field.setAccessible(true); //设置属性为可访问
            try {
                String name = field.getName();//获取属性的名称
                String a = "";
                if(field.getType().getName().contains("Date") || field.getType().getName().contains("Timestamp"){
                    if(null != field.get(obj){
                        a = format.format(field.get(obj);
                        map.put(name, a);
                    }
                }else {
                    map.put(name,field.get(obj);
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            field.setAccessible(false);
        }
        return map;
    }
    
    /**
     * 
     * @param obj
     * @param ignoreProperties
     * @return map
     * @description  实体转map(忽略指定字段)
     * @example	
     * 	Map<String, Object> map = new HashMap<String, Object>();
     * 	CC02 cc02 = (CC02) rslist.get(0);
     * 	map = EntityConvertMap.convertEntityToMap(cc02,new String[]{"aac002","aac003"});
     * 
     */
    public static Map<String, Object> convertEntityToMap(Object obj, String... ignoreProperties){

        Map<String, Object> map = new HashMap<String, Object>();
        Class<?> clazz = obj.getClass();
        //获取实体类中所有属性的值
        Field[] fields = clazz.getDeclaredFields();
        List<String> ignoreList = ignoreProperties != null ? Arrays.asList(ignoreProperties) : null;
        for(Field field:fields){
            field.setAccessible(true); //设置属性为可访问
            try {
                String name = field.getName();//获取属性的名称
                String a = "";
                if (!ignoreList.contains(name) {
                    if(field.getType().getName().contains("Date") || field.getType().getName().contains("Timestamp"){
                        if(null != field.get(obj){
                            a = format.format(field.get(obj);
                            map.put(name, a);
                        }
                    }else {
                        map.put(name,field.get(obj);
                    }
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            field.setAccessible(false);
        }
        return map;
    }
}