反射封装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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LanceToBigData

JavaSE集合(八)之Map

前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族。以前的时候学习Map的时候没有很认真的去学习,我觉得...

24080
来自专栏黑泽君的专栏

java基础学习_集合类04_Map接口、Collections工具类_day18总结

============================================================================= ==...

9110
来自专栏陈树义

Java集合常见面试题集锦

1、介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List、Set、Map、Queue三大数据结构。它们在Java中的...

43250
来自专栏CRPER折腾记

JS数组去重!!!一篇不怎么靠谱的"深度"水文

数组去重,这是一个老梗了...今天我又拿出来说了... 我们在考虑全面一点的情况下,数组去重的实现,比如针对NaN,undefined,{}; 这其中涉及的知识...

11440
来自专栏Java大联盟

Java面试手册:集合框架

27730
来自专栏Android开发指南

12:集合map、工具类

37080
来自专栏黑泽君的专栏

java基础学习_集合类02_List的子类、泛型、增强for循环、静态导入、可变参数_day16总结

============================================================================= ==...

7610
来自专栏LanceToBigData

JavaSE(八)之Map总结

上一篇是总结了Collection接口的各种实现类,这一篇我将分享的是Map的总结,希望大家点评! 一、Map接口 1.1、为什么Collection不能满足集...

222100
来自专栏Python爱好者

Java基础笔记18

11170
来自专栏吾爱乐享

java之学习去除ArrayList中重复自定义对象元素

18560

扫码关注云+社区

领取腾讯云代金券