用一个比较笨的方法实现的。但简单有效,struts2的属性注入用了堆栈OGNL等很多东西太复杂
public Object packegeBean(Map<String,String> map,Class<?> clazz) throws InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException, ParseException{
//得到对象实例,用于存储值
Object o = clazz.newInstance();
//得到类的所有方法
Method[] ms = clazz.getMethods();
if(ms!=null&&ms.length>0){
for(Method m:ms){
String mName = m.getName();
if(mName.startsWith("set")){
//得到属性名称
String param = mName.substring(3).substring(0, 1).toLowerCase()+mName.substring(4);
//map的KEY与对象的属性名一致
String value = map.get(param);
m.invoke(o, getParameterValue(m, value));
}
}
}
return o;
}
/**
* 将得到的数据以Object类型返回
* @return
* @throws ParseException
*/
public Object getParameterValue(Method m,String value) throws ParseException{
String returnClass = m.getParameterTypes()[0].getSimpleName();
if(returnClass.equals("int")||returnClass.equals("Integer")){
if(StringUtils.isNotBlank(value)){
return Integer.parseInt(value);
}else{
if(returnClass.equals("Integer")){
return null;
}
return 0;
}
}else if(returnClass.equals("Long")||returnClass.equals("long")){
if(StringUtils.isNotBlank(value)){
return Long.parseLong(value);
}else{
if(returnClass.equals("Long")){
return null;
}
return 0;
}
}else if(returnClass.equals("String")){
if(StringUtils.isNotBlank(value)){
return String.valueOf(value);
}else{
return null;
}
}else if(returnClass.equals("Boolean")||returnClass.equals("boolean")){
if(StringUtils.isNotBlank(value)){
return Boolean.parseBoolean(value);
}else{
if(returnClass.equals("Boolean")){
return null;
}
return false;
}
}else if(returnClass.equals("Date")){
if(StringUtils.isNotBlank(value)){
return DateUtils.parseDate(value, new String[]{"yyyy-MM-dd HH:mm:ss"});
}else{
return null;
}
}else if(returnClass.equals("double")||returnClass.equals("Double")){
if(StringUtils.isNotBlank(value)){
return Double.parseDouble(value);
}else{
if(returnClass.equals("Double")){
return null;
}
return 0;
}
}else if(returnClass.equals("Float")||returnClass.equals("float")){
if(StringUtils.isNotBlank(value)){
return Float.parseFloat(value);
}else{
if(returnClass.equals("Float")){
return null;
}
return 0;
}
}else if(returnClass.equals("BigInteger")){
if(StringUtils.isNotBlank(value)){
return BigInteger.valueOf(Long.parseLong(value));
}else{
return null;
}
}
return null;
}