javaBean 转 map,map转 javaBean 很常见,这里记录下,
主要就是使用反射,反射很有意思的,有兴趣的可以去自行查看资料。
直接上代码。
map转对象
/**
* mao 转 对象
* @param map
* @param clz
* @return
*/
public static <T> T mapToObject(Map<String , Object> map,Class<?> clz){
try{
// 获取当前对象的实例
Object instance = clz.newInstance();
// 获取所有定义的方法
Method[] declaredMethods = clz.getDeclaredMethods();
for (Method method : declaredMethods) {
// 获取方法名字
String mName = method.getName();
// 获取字段名称, getset....
String fName = mName.substring(3).substring(0,1).toLowerCase() + mName.substring(3).substring(1);
// 确定是 set方法,因为只有 set方法set值
if( mName.indexOf("set")==0 ){
// 获取方法的参数类型
Class<?>[] types = method.getParameterTypes();
for (Class<?> c : types) {
// 获取参数的类型,全限定类名
String type = c.getName();
// 判断类型,然后调用方法,set进入值
if( type.equals("java.lang.String") ){
Method stringMethod = clz.getDeclaredMethod(mName, String.class);
stringMethod.invoke(instance,String.valueOf(map.get(fName)));
}else if( type.equals("java.lang.Integer") ){
Method integerMethod = clz.getDeclaredMethod(mName, Integer.class);
integerMethod.invoke(mName,(Integer)map.get(fName));
}else if(type.equals("java.lang.Float") ){
Method integerMethod = clz.getDeclaredMethod(mName, Float.class);
integerMethod.invoke(mName,(Float)map.get(fName));
}else if(type.equals("java.lang.Double") ){
Method integerMethod = clz.getDeclaredMethod(mName, Double.class);
integerMethod.invoke(mName,(Double)map.get(fName));
}
}
}
}
return (T)instance;
}catch (Exception e){
new IllegalStateException("转换失败");
return (T)new Object();
}
}
对象转map
/**
* 对象转 map
* @param object
* @return
*/
public static Map<String,Object> objectToMap(Object object){
try{
Map<String,Object> result = new HashMap<>();
Class<?> cla = object.getClass();
// 获取所有定义的字段
Field[] declaredFields = cla.getDeclaredFields();
for (Field f: declaredFields) {
String fName = f.getName();
String methed = "get" + fName.substring(0,1).toUpperCase() + fName.substring(1);
// 待执行方法
Method declaredMethod = cla.getDeclaredMethod(methed, null);
// 执行方法,获取值
Object val = declaredMethod.invoke(object);
result.put(fName,val);
}
return result;
}catch (Exception e){
return new HashMap<>();
}
}