使用反射将req.getParameterMap()赋值给实体类

这是一个将Map<String, String[]> 类型的map集合赋值给一个实体类。

这个map集合是以   map={ key1 = {value1 , value2} ,key2={value1 ,value2} . . .}的形式,需要理清楚每一步遍历。

思路:1、构造实体类的无参构造,创建对象;

2、通过反射实体类中的set方法设置实体类的属性值(需要注意:1、map集合中的键值对是无序的;2、前端传过来的数据不都是实体类的属性,常常有action=value这样的键值对存在map集合中,需要将其剔除);

3、还有一个思路是反射实体类的有参构造器,同样也需要剔除无关数据,还有将键值对按照构造器顺序传进去。

注意 :1、此方法适用于数据库中字段名是name,不适用字段名是 t_name ,可在代码中使用String类中的方法进行截取

2、代码中的获得参数的数据类型为常用类型,可根据数据库中的字段类型添加代码片段

 public static <T> T parameterMapToBean(HttpServletRequest req, Class<T> clazz) {

        //获得参数的map集合
        Map<String, String[]> map = req.getParameterMap();

        //获取实体类的对象
        T bean = null;
        try {
            bean = clazz.newInstance();
        } catch (InstantiationException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }

        //获取实体类的所有方法
        Method[] methods = clazz.getDeclaredMethods();
        //开始遍历实体类方法
        for (Method method : methods) {
            //判断方法名是否以set开头
            if (method.getName().startsWith("set")) {
                //遍历map集合中的key
                for (Map.Entry<String, String[]> entry : map.entrySet()) {
                    //判断方法名末尾是否和map的key一致,比较的时候将方法名全部转为小写
                    if (method.getName().toLowerCase().endsWith(entry.getKey())) {
                        //遍历map中的value值,因为map中是以 k1={v1,v2} ,k2={v3,v4}的形式存储数据的
                        try {
                            for (String e : entry.getValue()) {
                                //获取set方法中的参数类型
                                Class<?>[] parameterTypes = method.getParameterTypes();
                                //因为set方法的参数类型只有一个,所以取第一个
                                Class<?> parameterType = parameterTypes[0];
                                //获得参数类型的名字
                                String simpleName = parameterType.getSimpleName();
                                //比较参数类型名并将获得的String类型的数据转换为对应实体类的数据
                                if ("String".equals(simpleName)) {
                                    method.invoke(bean, e);
                                } else if ("Integer".equals((simpleName)) || "int".equals((simpleName))) {
                                    int ee = Integer.parseInt(e);
                                    method.invoke(bean, ee);
                                } else if ("Double".equals((simpleName)) || "double".equals((simpleName))) {
                                    double ee = Double.parseDouble(e);
                                    method.invoke(bean, ee);
                                }
                                //其他类型可以添加,以上举出常用的数据类型
                            }
                        } catch (IllegalAccessException e) {
                            throw new RuntimeException(e);
                        } catch (InvocationTargetException e) {
                            throw new RuntimeException(e);
                        }
                    }
                }

            }

        }
        //返回对象
        return bean;
    }

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: req.getParameterMap()是一个Java Servlet API中的方法,用于获取HTTP请求中的所有参数和值,并将它们存储在一个Map对象中。该方法返回一个Map对象,其中键是参数名称,值是参数值的数组。在处理HTTP请求时,可以使用该方法来获取请求中的所有参数,并对它们进行处理。 ### 回答2: req.getParameterMap()是一个用于获取包含了请求参数的Map对象的方法。在Java的Web开发中,当客户端向服务器发送请求时,可以通过req.getParameterMap()方法来获取请求中的所有参数。 该方法返回的是一个Map对象,其中key代表请求参数的名称,value则代表对应的参数值。对于同一个参数名,如果该参数有多个值,那么该参数的值会以字符串数组的形式存储在Map的value中。 可以通过遍历这个Map来获取所有请求的参数和其对应的值。例如: ``` Map<String, String[]> paramMap = req.getParameterMap(); for (String paramName : paramMap.keySet()) { String[] paramValues = paramMap.get(paramName); System.out.print("参数名:" + paramName + ",参数值:"); for (String paramValue : paramValues) { System.out.print(paramValue + " "); } System.out.println(); } ``` 该方法常用于获取表单数据、URL参数等。通过req.getParameterMap()方法可以方便地获取请求中的所有参数,并对其进行相应的处理和解析。 当然,在使用该方法时需要注意参数的编码方式,以及参数值的数据类型等。也可以使用其他相关的方法来获取请求中的单个参数值,如req.getParameter()等。 总之,req.getParameterMap()方法在Java的Web开发中是一个常用的获取请求参数的方法,可以帮助开发者获取请求中的所有参数,并进行相应的处理。 ### 回答3: req.getParameterMap()是Java Servlet API中的一个方法,用于获取HTTP请求的参数映射。 当客户端发送一个HTTP请求到服务器时,请求中常常携带一些参数,例如表单提交的数据或者URL中的查询字符串。req.getParameterMap()方法可以将这些参数以键值对的形式返回。 返回的是一个Map对象,其中键是参数名,值是一个字符串数组,包含该参数的所有取值。如果参数只有一个取值,数组的长度就是1;如果参数有多个取值,则数组的长度就是多个取值的个数。 以以下代码为例: Map<String, String[]> paramMap = req.getParameterMap(); String[] values = paramMap.get("name"); for (String value : values) { System.out.println(value); } 假设HTTP请求中有一个名为"name"的参数,值是"Tom"和"Jerry",那么在上述代码中,values数组的长度为2,值分别是"Tom"和"Jerry",最终输出结果为: Tom Jerry 通过使用req.getParameterMap()方法,我们可以获取到HTTP请求中的所有参数,并对它们进行处理,例如用于表单验证、业务逻辑处理等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值