public static Object map2Bean(HashMap map,Class cls){
Object obj = null;
try {
obj = cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//取出bean里的所有方法
Method[] methods = cls.getMethods();
for(int i=0; i<methods.length;i++){
//取方法名
String method = methods[i].getName();
//取出方法的类型
Class[] cc = methods[i].getParameterTypes();
if (cc.length != 1) continue;
//如果方法名没有以set开头的则退出本次for
if(method.indexOf("set") < 0 ) continue;
//类型
String type = cc[0].getSimpleName();
try {
//转成小写
// Object value = method.substring(3).toLowerCase();
Object value = method.substring(3,4).toLowerCase()+method.substring(4);
//如果map里有该key
if(map.containsKey(value)&&map.get(value)!=null){
//调用其底层方法
setValue(type, map.get(value), i, methods, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
/***
* 调用底层方法设置值
*/
private static void setValue(String type, Object value, int i, Method[] method, Object bean){
if (value!=null && !value.equals("")){
try {
if(type.equals("String")){
//第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
method[i].invoke(bean, new Object[] {value});
}
else if(type.equals("int") || type.equals("Integer")) {
method[i].invoke(bean, new Object[] { new Integer(""+value) });
}
else if(type.equals("long") || type.equals("Long")) {
method[i].invoke(bean, new Object[] { new Long(""+value) });
}
else if(type.equals("boolean") || type.equals("Boolean")) {
method[i].invoke(bean, new Object[] { Boolean.valueOf(""+value) });
}
else if(type.equals("BigDecimal")) {
method[i].invoke(bean, new Object[] { new BigDecimal(""+value) });
}
else if(type.equals("Date")) {
Date date =null;
if(value.getClass().getName().equals("java.util.Date")){
date=(Date) value;
}
else{
String format = ((String)value).indexOf(":")>0?"yyyy-MM-dd hh:mm:ss":"yyyy-MM-dd";
date = DateUtil.convertStrtoDateIsss((String)(value),format);
}
if(date!=null){
method[i].invoke(bean, new Object[] {date});
}
}
else if(type.equals("byte[]")){
method[i].invoke(bean, new Object[] { new String(value+"").getBytes() });
}
} catch (Exception e) {
System.out.println("将linkHashMap 或 HashTable 里的值填充到javabean时出错,请检查!");
e.printStackTrace();
}
}
}
Object obj = null;
try {
obj = cls.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
//取出bean里的所有方法
Method[] methods = cls.getMethods();
for(int i=0; i<methods.length;i++){
//取方法名
String method = methods[i].getName();
//取出方法的类型
Class[] cc = methods[i].getParameterTypes();
if (cc.length != 1) continue;
//如果方法名没有以set开头的则退出本次for
if(method.indexOf("set") < 0 ) continue;
//类型
String type = cc[0].getSimpleName();
try {
//转成小写
// Object value = method.substring(3).toLowerCase();
Object value = method.substring(3,4).toLowerCase()+method.substring(4);
//如果map里有该key
if(map.containsKey(value)&&map.get(value)!=null){
//调用其底层方法
setValue(type, map.get(value), i, methods, obj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
return obj;
}
/***
* 调用底层方法设置值
*/
private static void setValue(String type, Object value, int i, Method[] method, Object bean){
if (value!=null && !value.equals("")){
try {
if(type.equals("String")){
//第一个参数:从中调用基础方法的对象 第二个参数:用于方法调用的参数
method[i].invoke(bean, new Object[] {value});
}
else if(type.equals("int") || type.equals("Integer")) {
method[i].invoke(bean, new Object[] { new Integer(""+value) });
}
else if(type.equals("long") || type.equals("Long")) {
method[i].invoke(bean, new Object[] { new Long(""+value) });
}
else if(type.equals("boolean") || type.equals("Boolean")) {
method[i].invoke(bean, new Object[] { Boolean.valueOf(""+value) });
}
else if(type.equals("BigDecimal")) {
method[i].invoke(bean, new Object[] { new BigDecimal(""+value) });
}
else if(type.equals("Date")) {
Date date =null;
if(value.getClass().getName().equals("java.util.Date")){
date=(Date) value;
}
else{
String format = ((String)value).indexOf(":")>0?"yyyy-MM-dd hh:mm:ss":"yyyy-MM-dd";
date = DateUtil.convertStrtoDateIsss((String)(value),format);
}
if(date!=null){
method[i].invoke(bean, new Object[] {date});
}
}
else if(type.equals("byte[]")){
method[i].invoke(bean, new Object[] { new String(value+"").getBytes() });
}
} catch (Exception e) {
System.out.println("将linkHashMap 或 HashTable 里的值填充到javabean时出错,请检查!");
e.printStackTrace();
}
}
}
转载于:https://blog.51cto.com/wangzhibing/292908