反射封装request参数为对象

来源:互联网 发布:ip摄像头破解软件 编辑:程序博客网 时间:2024/06/05 03:45
public class RequestUtil {    public static<T> T parseRequset( HttpServletRequest request,Class<T> c){        T t=null;            try {                t=c.newInstance();//根据反射生成实例对象                Method[] ms=c.getMethods();                Map<String,String[]> map=request.getParameterMap();    //map.entrySet()是将map里的每一个键值对//取出来封装成一个Entry对象在存到一个Set集合里面  //Map.Entry<String[], String>的意思是一个泛型,表//示Entry里装的String[]数组和string的字符串,分别是//key和value                          for(Map.Entry<String,String[]> entry:map.entrySet()){                    String key=entry.getKey();                    String[] values=entry.getValue();                    if(values!=null&&values.length>1){                        continue;                    }                    String v=values[0];                    key="set"+key;                    for(Method m:ms){                        if(key.equalsIgnoreCase(m.getName())){                            String parameterTypeName=m.getParameterTypes()[0].getName();                            if("int".equals(parameterTypeName)||"java.lang.Integer".equals(parameterTypeName)){                                m.invoke(t, Integer.parseInt(v));                            }else if("float".equals(parameterTypeName)||"java.lang.Float".equals(parameterTypeName)){                                m.invoke(t, Float.parseFloat(v));                            }else if("double".equals(parameterTypeName)||"java.lang.Double".equals(parameterTypeName)){                                m.invoke(t, Double.parseDouble(v));                            }else if("long".equals(parameterTypeName)||"java.lang.Long".equals(parameterTypeName)){                                m.invoke(t, Long.parseLong(v));                            }else if("short".equals(parameterTypeName)||"java.lang.Short".equals(parameterTypeName)){                                m.invoke(t, Short.parseShort(v));                            }else if("java.lang.String".equals(parameterTypeName)){                                m.invoke(t,v);                            }                            break;                        }                    }                }            } catch (Exception e) {                e.printStackTrace();                throw new RuntimeException(e);            }        return t;    }

public Object invoke(Object obj,Object args[])
参数:
obj - 从中调用底层方法的对象,必须是实例化的对象
args - 用于方法调用的参数,是个Object数组,因为参数有可能有多个
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果

例如:String result = (String)method.invoke(obj , sql);
执行obj的method方法(参数为sql),返回String类型结果

args参数可以为空,就是对应方法没有参数,
如:new Car().getBM() —- method.invoke( obj );//method为getBM,obj为Car类

obj可以为空,但必填null,表示同类中的公用方法,
如:getName( type ) —- method.invoke( null , args);//method为getName,args为type

2 0
原创粉丝点击