反射封装request参数为对象
2015-10-31 16:43
531 查看
[code]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
。
相关文章推荐
- IOS笔记UI--进度条
- 【APUE】Chapter1 UNIX System Overview
- 【UI】锤子手机-坚果手机-文艺青年版-配色色号
- JS中的 toString 和 valueOf 方法
- iOS——UIPasteboard 粘贴板
- 2013 duilib入门简明教程 -- 前言(1)
- AddressBookUI
- IB( Interface Builder )
- UITabBarController
- 获取手机照片UIImagePickerViewController
- UISearchBar和UISearchDisplayController
- [63]Unique Paths II
- UIdemo 制作一个简单的iPhone相册
- iOS 【UIKit-在程序运行时隐藏状态栏】
- UIImage加载内存性能比较
- UIPageControl实现分页图片轮播器
- IOS-23-Xcode6.4里UITableView不显示的可能原因及解决办法
- JSP中request属性的用法
- UIlabel —— 设置行间距
- 解决javamail ssl 测试unable to find valid certification path to requested target