利用Common-BeanUtils封装请求参数
一、BeanUtils介绍
commons-beanutils是利用反射机制对JavaBean的属性进行处理,提供了对于JavaBean的各种处理方法。众所周知,一个JavaBean通常包含了大量的属性,而对于JavaBean的处理导致大量get/set方法的堆积,使用BeanUtils能简化我们的代码量,将我们的双手从get/set方法中解放出来,让我们节省时间去搬其它的砖头。
二、BeanUtils基本使用
1,通过BeanUtils类可以直接get和set一个属性的值,方法如下(第一个参数是JavaBean对象,第二个参数是要操作的属性名):
getSimpleProperty(Object bean, String name)
Return the value of the specified simple property of the specified bean, converted to a String. setProperty(Object bean, String name, Object value)
Set the specified property value, performing type conversions as required to conform to the type of the destination property.
2,一个更常用更重要的方法是:copyProperties()
copyProperties(Object dest, Object orig)
Copy property values from the origin bean to the destination bean for all cases where the property names are the same. copyProperty(Object bean, String name, Object value)
Copy the specified property value to the specified destination bean, performing any type conversion that is required.
需要注意的是这种copy都是浅拷贝,复制后的两个Bean的同一个属性可能拥有同一个对象的引用。所以在使用时要小心,特别是对于属性为自定义类的情况。
三、封装web请求参数
定义一个静态方法copyParmas(),用于将request请求参数值赋给相应的bean的对应属性,若请求参数名与bean属性名不匹配,该值会被舍弃。
public static Object copyParams(Class targetClass, HttpServletRequest request){
Object bean = null;
try {
bean = targetClass.newInstance();
Map params = request.getParameterMap();
Set set = params.entrySet();
for(Iterator iterator = set.iterator();iterator.hasNext();){
Entry entry = (Entry) iterator.next();
String name = (String) entry.getKey();
Object[] values = (Object[]) entry.getValue();
if(values!=null){
if(values.length == 1){
BeanUtils.copyProperty(bean, name, values[0]);
}else {
BeanUtils.copyProperty(bean, name, values);
}
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return bean;
}
四、copyProperties性能
不幸的是Commons BeanUtil的copyProperties性能较差,而直接get/set虽然丑陋麻烦,但是性能很好。具体情况可参看文章:http://tntest.iteye.com/blog/399577 。
利用Common-BeanUtils封装请求参数的更多相关文章
- 十一、Struts2封装请求参数的方式
十一.Struts2封装请求参数的方式 方式一.Action 本身作为model对象,通过成员setter封装(一个名字为params的拦截器干的) 注意:表单中的名称要和动作类中的名称一致(这是必须 ...
- struts2封装请求参数
利用struts2框架进行将页面请求的参数封装有三种方法 第一种(不推荐) 就是动作类和bean中结合在一起,这样方法比较简单,但是很混乱. 代码: package com.example.actio ...
- asp.net中Request请求参数的自动封装
这两天在测一个小Demo的时候发现一个很蛋疼的问题----请求参数的获取和封装,例: 方便测试用所以这里是一个很简单的表单. <!DOCTYPE html> <html xmlns= ...
- Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
阅读目录 1. 通过HttpServletRequest获得请求参数和数据 2. 处理方法形参名==请求参数名 3. 如果形参名跟请求参数名不一样怎么办呢?用@RequestParam注解 4. 用实 ...
- 0056 Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装
浏览器总会向服务器传递一些参数,那么Spring MVC如何接收这些参数? 先写个简单的html,向服务器传递一些书籍信息,如下: <!DOCTYPE html> <html> ...
- springmvc 请求参数解析细节
springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...
- Struts2之处理请求参数
时间:2017-1-11 11:05 --Struts2中获取请求参数(重点)1.Struts2是一个MVC框架,那么分别表示什么? View:JSP Model:Action Co ...
- 【整理】01. localhost_access_log 记录post请求参数
环境:apache-tomcat-7.0.57 利用Filter过去request请求参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 ...
- SpringMVC 获取请求参数
1.获取Request response对象 在SpringMVC的注解开发中,可以选择性的接收Request和Response对象来使用 2.获取request对象请求参数 a.通过request对 ...
随机推荐
- Bestcoder round 18----B题(一元三次方程确定区间的最大值(包含极值比较))
Math Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- JavaSE基础练习IO,字符串,循环
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- jQuery comet
下面程序是例用从数据端推送信息,原理是每隔10秒读取一下data.txt文件,看有木有新的数据输入,如果有,则alert文件内容. hmtl代码是 <!DOCTYPE html> < ...
- [HNOI 2010] 弹飞绵羊
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2002 [算法] LCT动态维护森林连通性 时间复杂度 : O(NlogN ^ 2) ...
- AQS共享锁应用之Semaphore原理
我们调用Semaphore方法时,其实是在间接调用其内部类或AQS方法执行的.Semaphore类结构与ReetrantLock类相似,内部类Sync继承自AQS,然后其子类FairSync和NoFa ...
- tinymix
1. tinymix:列出所有的 sound kcontrol 2. tinymix "Capture Volume":读出里面的值 3. tinymix "Captur ...
- Linux 设备树 dts
1. dtb反编译成dts文件命令:./kernel-4.4/scripts/dtc/dtc_overlay -I dtb -O dts out/target/product/m863ur100_p0 ...
- tty初探 — uart驱动框架分析
写在前面: 我们没有讲UART驱动,不过我们认为,只要系统学习了第2期,应该具备分析UART驱动的能力,小编做答疑几年以来,陆陆续续有不少人问到UART驱动怎么写,所以今天就分享一篇深度长文(1700 ...
- dos窗口的乱码问题
1.在dos窗口上输入chcp 65001 2.然后右键属性选择字体
- ++i和i++的效率孰优孰劣
在内建数据类型的情况下,效率没有区别: 在自定义数据类型的情况下,++i效率更高! 分析: (自定义数据类型的情况下) ++i返回对象的引用: i++总是要创建一个临时对象,在退出函数时还要销毁它,而 ...