map转实体类

利用反射,可将Map<String,Object>对象转成真正的实体类。

/**
* 把Map<String,Object>处理成实体类
* @param clazz 想要的实体类
* @param map 包含信息的Map对象
* @return
*/
@SuppressWarnings("unchecked")
public static Object mapToObject(Class clazz, Map<String,Object> map){

if(null == map){
return null;
}

Field[] fields = clazz.getDeclaredFields(); //取到类下所有的属性,也就是变量名
Field field;
Object o = null;
try {
o = clazz.newInstance();
} catch (InstantiationException e1) {
e1.printStackTrace();
} catch (IllegalAccessException e1) {
e1.printStackTrace();
}
for(int i=0; i<fields.length; i++){
field = fields[i];
String fieldName = field.getName();
//把属性的第一个字母处理成大写
String stringLetter=fieldName.substring(0, 1).toUpperCase();
//取得set方法名,比如setBbzt
String setterName="set"+stringLetter+fieldName.substring(1);
//真正取得set方法。
Method setMethod = null;
Class fieldClass = field.getType();
try {
if(isHaveSuchMethod(clazz, setterName)){
if(fieldClass == String.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, String.valueOf(map.get(fieldName)));//为其赋值
}else if(fieldClass == Integer.class || fieldClass == int.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Integer.parseInt(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Boolean.class || fieldClass == boolean.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Boolean.getBoolean(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Short.class || fieldClass == short.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Short.parseShort(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Long.class || fieldClass == long.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Long.parseLong(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Double.class || fieldClass == double.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Double.parseDouble(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == Float.class || fieldClass == float.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, Float.parseFloat(String.valueOf(map.get(fieldName))));//为其赋值
}else if(fieldClass == BigInteger.class ){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, BigInteger.valueOf(Long.parseLong(String.valueOf(map.get(fieldName)))));//为其赋值
}else if(fieldClass == BigDecimal.class){
setMethod = clazz.getMethod(setterName, fieldClass);
setMethod.invoke(o, BigDecimal.valueOf(Long.parseLong(String.valueOf(map.get(fieldName)))));//为其赋值
}else if(fieldClass == Date.class){
setMethod = clazz.getMethod(setterName, fieldClass);
if(map.get(fieldName).getClass() == java.sql.Date.class){
setMethod.invoke(o, new Date(((java.sql.Date)map.get(fieldName)).getTime()));//为其赋值
}else if(map.get(fieldName).getClass() == java.sql.Time.class){
setMethod.invoke(o, new Date(((java.sql.Time)map.get(fieldName)).getTime()));//为其赋值
}else if(map.get(fieldName).getClass() == java.sql.Timestamp.class){
setMethod.invoke(o, new Date(((java.sql.Timestamp)map.get(fieldName)).getTime()));//为其赋值
}
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}

}
return o;
}


/**
* 判断某个类里是否有某个方法
* @param clazz
* @param methodName
* @return
*/
public static boolean isHaveSuchMethod(Class<?> clazz, String methodName){
Method[] methodArray = clazz.getMethods();
boolean result = false;
if(null != methodArray){
for(int i=0; i<methodArray.length; i++){
if(methodArray[i].getName().equals(methodName)){
result = true;
break;
}
}
}
return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值