这两天在做请求参数封装时总是遇到 java.lang.IllegalArgumentException: argument type mismatch参数类型异常的问题,由于map里面定义的value是object类型在转为实体javaBean时,像Integer,Long等类型的属性就会出现此异常,解决方法如下:
public static Object toJavaBean(Object javabean, Map
m) {
// System.out.println(m);
// 所有声明了的方法
Method[] methods = javabean.getClass().getDeclaredMethods();
for (Method method : methods) {
if (method.getName().startsWith("set")) {
// 得到该方法的参数类型
Class
[] params = method.getParameterTypes();
String field = method.getName();
field = field.substring(field.indexOf("set") + 3);
field = field.toLowerCase().charAt(0) + field.substring(1);
// System.out.println(field+"----"+m.get(field.toString()));
Object value = m.get(field.toString());
try {
// convert types for some popular ones
if (value != null && !"".equals(value)) {
String pa = params[0].getName().toString();
// if (value instanceof java.util.Date) {
if (pa.equals("java.util.Date")) {
value = new java.util.Date(((java.util.Date) value).getTime());
}
// }
else if (pa.equals("java.lang.String")) {
value = new java.lang.String(value.toString());
} else if (pa.equals("java.lang.Integer") || pa.equals("int")) {
value = new java.lang.Integer(value.toString());
} else if (pa.equals("java.lang.Long")) {
value = new java.lang.Long(value.toString());
} else if (pa.equals("java.lang.Double")) {
value = new java.lang.Double(value.toString());
} else if (pa.equals("java.lang.Float")) {
value = new java.lang.Float(value.toString());
} else if (pa.equals("java.lang.Short")) {
value = new java.lang.Short(value.toString());
} else if (pa.equals("java.lang.Byte")) {
value = new java.lang.Byte(value.toString());
} else if (pa.equals("java.lang.Character")) {
// value= new java.lang.Character(value);
} else if (pa.equals("java.lang.Boolean")) {
value = new java.lang.Boolean(value.toString());
}
method.invoke(javabean, new Object[] { value });
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
return javabean;
}