直接上代码
public static Map BeanToMap(Object o) {
Map map = new HashMap();
Class<?> aClass = o.getClass();
Field[] declaredFields = aClass.getDeclaredFields();
Method[] declaredMethods = aClass.getDeclaredMethods();
Object value = null;
for (Field field :
declaredFields) {
String key = field.getName();
String method = "get" + key.substring(0, 1).toUpperCase() + key.substring(1);
for (Method m :
declaredMethods) {
if (!method.equals(m.getName())) {
continue;
}
try {
value = m.invoke(o);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
map.put(key, value);
}
return map;
}
public static <T> T MapToBean(Map map, Class<T> clazz) {
T obj = null;
try {
obj = clazz.newInstance();
Method[] methods = clazz.getDeclaredMethods();
Set keySet = map.keySet();
for (Object key :
keySet) {
Object value = map.get(key);
String keyName = key.toString();
String methodName = "set" + keyName.substring(0, 1).toUpperCase() + keyName.substring(1);
for (Method m :
methods) {
if (methodName.equals(m.getName())) {
Class<?>[] parameterTypes = m.getParameterTypes();
String name = parameterTypes[0].getSimpleName();
setValue(m,obj,value,name);
break;
}
}
}
} catch (Exception e) {
obj = null;
}
return clazz.cast(obj);
}
public static void setValue(Method method,Object obj,Object value,String type) throws InvocationTargetException, IllegalAccessException, ParseException {
if ("String".equals(type)){
method.invoke(obj,value.toString());
}else if ("char".equals(type)||"Character".equals(type)){
method.invoke(obj,new Character(value.toString().toCharArray()[0]));
}else if ("int".equals(type)||"Integer".equals(type)){
method.invoke(obj,new Integer(value+""));
}else if ("double".equals(type) || "Double".equals(type)) {
method.invoke(obj,
new Double("" + value));
} else if ("float".equals(type) || "Float".equals(type)) {
method.invoke(obj,
new Float("" + value));
} else if ("long".equals(type) || type.equals("Long")) {
method.invoke(obj,
new Long("" + value));
} else if ("boolean".equals(type) || "Boolean".equals(type)) {
method.invoke(obj,
Boolean.valueOf("" + value));
} else if ("BigDecimal".equals(type)) {
method.invoke(obj, new BigDecimal(""
+ value));
} else if ("Date".equals(type)) {
Date date = null;
if ("java.util.Date".equals(value.getClass().getName())) {
date = (Date) value;
} else {
String format = (value.toString().indexOf(":")) > 0 ? "yyyy-MM-dd hh:mm:ss"
: "yyyy-MM-dd";
SimpleDateFormat sf = new SimpleDateFormat();
sf.applyPattern(format);
date = sf.parse(value.toString());
}
if (date != null) {
method.invoke(obj, new Object[]{date});
}
} else if ("byte[]".equals(type)) {
method.invoke(obj,
new Object[]{(value + "").getBytes()});
} else {
method.invoke(obj, value);
}
}