反射封装request参数为对象

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

时间: 2024-09-15 07:14:27

反射封装request参数为对象的相关文章

利用反射获取方法参数对象的泛型定义

问题描述 利用反射获取方法参数对象的泛型定义 public CommonRsp<AAARsp> hotelCheckAvailability(CommonReq<BBBReq> req) throws Exception; 如何通过反射获取如上方法中的参数泛型定义BBBReq? 解决方案 你这是java语法吗,如果是的话,其实java的泛型本质上是糖衣语法,编译后泛型是会被擦除的.你获取泛型本质上是没有意义的,应该是获取不到的.

在JSP页面获取后台action封装的参数,这个参数里面又含有两个对象,二层引用,报错

问题描述 在JSP页面获取后台action封装的参数,这个参数里面又含有两个对象,二层引用,报错 javax.el.PropertyNotFoundException: Property 'userAccount' not found on type java.lang.String 上面是报错信息, 下面是JSP页面: 用户名: ${commentlist.userAccount.userName } 职业: ${commentlist.userAccount.job } ${commentl

spring mvc-spring MVC jsp页面获取参数 以对象的方式

问题描述 spring MVC jsp页面获取参数 以对象的方式 jsp里面的body部分 <h1>用户信息添加2</h1> <form action="user/add3.do" method="post"> 编号:<input type="text" name="userId"/><br/> 姓名:<input type="text" n

接口-php怎么调用wcf服务,调用参数是对象参数。

问题描述 php怎么调用wcf服务,调用参数是对象参数. .net做的wcf接口,部署IIS上访问是可以的如图: 我用php soap调用测试,是否能通,也是可以的: <?php header('Content-Type: text/plain'); $client = new SoapClient('http://testu.sh.jinri.com/Flight.User.SOA/SuggestService.svc?wsdl'); echo ' '; echo "提供的方法n&quo

jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象_jquery

Form Plugin API 里提供了很多有用的方法可以让你轻松的处理表单里的数据和表单的提交过程. 测试环境:部署到Tomcat中的web项目. 本文演示的是:jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象 ajaxForm()和ajaxSubmit()的可选参数项对象 ajaxForm 和 ajaxSubmit 都支持大量的可选参数,它们通过可选参数项对象传入.可选参数项对象只是一个简单的 JavaScript对象,里边包含了一些属性和一些值:

Request和Response对象

request|response|对象 从ASP中能够应用客户请求和服务器响应的细节是通过ASP内置的Request和Response对象来实现的.      · Request对象:为脚本提供了当客户端请求一个页面或者传递一个窗体时,客户端提供的全部信息.这包括能指明浏览器和用户的HTTP变量,在这个域名下存放在浏览器中的cookie,任何作为查询字符串而附于URL后面的字符串或页面的<FORM>段中的HTML控件的值.也提供使用Secure Socket Layer(SSL)或其他加密通信

ASP的Request和Response对象使用详解

Request和Response这两个对象是ASP所提供的内置对象中最常用的两个.在浏览器(或其他用户代理)和Web服务器之间,请求与响应中发生的信息交流可以通过ASP中的两个内置对象来进行访问和管理,这两个对象称为Request和Response对象. 在ASP页中所要进行的工作几乎都要访问这两个对象,使用这两个对象的方式将影响页面的效率及可靠性.当然,它们的主要用途是访问用户发回到服务器的值,即从HTML页的<FORM>段获得或附在URL后面作为查询字符串,并创建合适的输出返回给用户,且它

Java反射获取方法参数名

问题 在编写一个jws(游戏中心的WEB框架)增强工具的时候,需要得到方法的参数名,而jws本身是可以获取参数名的(不然controller里将请求参数与方法参数绑定的功能也无法实现了). 但使用了jws提供的获取参数名方法时,却出现返回的参数名不正确的问题(只会出现在idea里面): 所以说: 为什么可以获取方法参数? 为什么eclipse和生产环境里不会发生这种问题? 怎样可以正确获取方法的参数名? 问题排查 获取方法参数 众所周知,在java里面,直到java8才可以正式的通过反射获取方法

Symfony实现行为和模板中取得request参数的方法_php实例

本文实例讲述了Symfony实现行为和模板中取得request参数的方法.分享给大家供大家参考,具体如下: 一.模板中取得参数 <?php echo $sf_request->getParameter('name','namespace');?> <?php echo $sf_request->getParameter('name');?> 二.行为中取得参数 $request->getParameter('name'); //模板中取得参数 <?php e