@Slf4j
public class TypeConversionUtils {
/**
* object转List
*
* @param obj 对象
* @param clazz class
* @param <T> 目标对象
* @return list<T>
*/
public static <T> List<T> objectToList(Object obj, Class<T> clazz) {
List<T> resultList = new ArrayList<>(MtmConstantInfo.NUMBER_TEN);
if (null == obj) {
return Collections.EMPTY_LIST;
}
List<T> models = JSONObject.parseArray(JSON.toJSONString(obj), clazz);
for (T model : models) {
T newModel = JSONObject.parseObject(JSON.toJSONString(model), clazz);
resultList.add(newModel);
}
return resultList;
}
/**
* object转Map
*
* @param obj 对象(包括继承对象)
* @return map
*/
public static Map<String, Object> objectAllToMap(Object obj) {
Map<String, Object> dataMap = new HashMap<>(MtmConstantInfo.NUMBER_SIXTEEN);
if (null == obj) {
return dataMap;
}
Class<?> clazz = obj.getClass();
copyField(obj, dataMap, clazz);
copyField(obj, dataMap, clazz.getSuperclass());
return dataMap;
}
/**
* 复制对象每个字段值
*
* @param obj 对象
* @param dataMap 返回map
* @param clazz 对象类型
*/
private static void copyField(Object obj, Map<String, Object> dataMap, Class<?> clazz) {
for (Field field : clazz.getDeclaredFields()) {
try {
BeanUtils.setProperty(dataMap, field.getName(), BeanUtils.getProperty(obj, field.getName()));
} catch (IllegalAccessException e) {
log.error("TypeConversionUtils objectAllToMap IllegalAccessException!");
} catch (InvocationTargetException e) {
log.error("TypeConversionUtils objectAllToMap InvocationTargetException!");
} catch (NoSuchMethodException e) {
log.error("TypeConversionUtils objectAllToMap NoSuchMethodException!");
}
}
}
/**
* object转Map(java 内省机制 的 方式)
*
* @param obj 对象(包括继承对象)
* @return map
*/
public static Map<String, Object> objectToMap(Object obj) {
Map<String, Object> map = new HashMap<>(MtmConstantInfo.NUMBER_SIXTEEN);
try {
// 获取JavaBean的描述器
BeanInfo b = Introspector.getBeanInfo(obj.getClass(), Object.class);
// 获取属性描述器
PropertyDescriptor[] pds = b.getPropertyDescriptors();
// 对属性迭代
for (PropertyDescriptor pd : pds) {
// 属性名称
String propertyName = pd.getName();
// 属性值,用getter方法获取
Method m = pd.getReadMethod();
// 用对象执行getter方法获得属性值
Object properValue = m.invoke(obj);
// 确认对象的类型
Class<?> propertyType = pd.getPropertyType();
if (Objects.equals(Date.class, propertyType) && Objects.nonNull(properValue)) {
ApiModelProperty annotation = propertyType.getAnnotation(ApiModelProperty.class);
SimpleDateFormat df = null;
if (null != annotation && StringUtils.isNotBlank(annotation.example())) {
df = new SimpleDateFormat(annotation.example());
} else {
df = new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN);
}
String format = df.format(properValue);
// 把属性名-属性值 存到Map中
BeanUtils.setProperty(map, propertyName, format);
} else {
// 把属性名-属性值 存到Map中
BeanUtils.setProperty(map, propertyName, properValue);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map;
}
}