map自动转换为对象
/**
* 从map获取对象,对map中key去除下划线全替换为大写字母,匹配时对象名称全
* @param map
* @param clazzpath 类的全限定类名reference
* @return
*/
public static Object getObjectFromMap(Map<String,Object> map,String clazzpath) {
map = formatMap(map);
try {
Class c = Class.forName(clazzpath);
Constructor constructor = c.getConstructor();
Object object = constructor.newInstance();
Field[] declaredFields = c.getDeclaredFields();
// 遍历类中定义的所有变量
for (Field declaredField : declaredFields) {
// 获取变量名.去除下划线
String name = declaredField.getName();
// 如果map中存在变量名去除下划线后的大写参数则进行赋值
String nameFormat = name.replaceAll("_","").toUpperCase();
if (map.containsKey(nameFormat)) {
// 取消访问检查,否则私有变量无法赋值
declaredField.setAccessible(true);
Object o = map.get(nameFormat);
// 判断是否是数字类型
boolean numeric = isNumeric(o);
if (numeric) {
declaredField.set(object, String.valueOf(o));
} else {
declaredField.set(object, o);
}
}
}
return object;
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
/**
* 判断对象是否是数字
* @param obj
* @return
*/
public static boolean isNumeric (Object obj){
if(obj instanceof BigDecimal) {
return true;
}
String str = String.valueOf(obj);
for (int i = 0;i < str.length();i++) {
if (!Character.isDigit(str.charAt(i))){
return false;
}
}
return true;
}