利用反射实现实体转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;
}
}