import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @author sunweidong
*/
public class ReflectPojoUtil {
protected static final Logger logger = LoggerFactory.getLogger(WebServiceUtil.class);
private static final String SIMPLE_DATE_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss";
/**
* 反射获取字段及字段值
*
* @param data 待处理数据
* @return 反射处理后得到的map集合
* @createBy: sunweidong 2021-3-15
*/
public static <T> List<Map<String, String>> processList(List<T> data) {
// 判断数据是否有效
if (data == null || data.size() == 0) {
return null;
}
try {
// 定义一个返回的集合
List<Map<String, String>> list = new ArrayList<>();
for (T temp : data) {
// 获取所有的字段
Field[] declaredFields = temp.getClass().getDeclaredFields();
// 定义一个存储字段的map
Map<String, String> map = new HashMap<>(declaredFields.length);
// 遍历所有的字段,获取的字段名称和值
for (Field declaredField : declaredFields) {
// 获取字段名称
String fieldName = declaredField.getName();
// 判断字段名称是否需要
if (filterUselessField(fieldName)) {
continue;
}
// 设置字段可以被访问
declaredField.setAccessible(true);
// 获取字段的值
Object o = declaredField.get(temp);
map.put(fieldName, o == null ? "" : processFieldValue(o));
}
list.add(map);
}
return list;
} catch (Exception e) {
logger.error("###### ReflectPojoUtil.processList 反射获取字段及值出错", e);
}
return null;
}
/**
* 处理字段的值
*
* @param obj 字段值
*/
private static String processFieldValue(Object obj) {
// 判断如果是时间类型则需要特殊的处理
if (obj instanceof Date) {
return SimpleDateFormatUtil.format(SIMPLE_DATE_FORMAT_PATTERN, (Date) obj);
}
return obj.toString();
}
/**
* 过滤不需要的字段
*
* @param fieldName 字段名称
* @return <p>是否不需要该字段<ul><li>true 不需要该字段</li><li>false 需要该字段</li></ul>
*/
private static boolean filterUselessField(String fieldName) {
if ("serialVersionUID".equals(fieldName)) {
return true;
}
return false;
}
}