BeanUtils拷贝对象
BeanUtils拷贝对象(浅拷贝)
拷贝的实现方法是将源bean(也可以是Map)中的每个element在转换器(Converter,官方已经提供一些默认的类型间转换器)
的帮助下实现一些类型的转换
,将转换的结果设置到目标bean对应的属性中,只要属性名相同
就可以从源bean中拷贝值到目标bean中
1. BeanUtils.populate(Object bean,Map properties)
将请求的Map封装为bean对象(JavaBean)
常用在将form表单提交给servlet程序,对数据进行封装,封装到Person对象中
apache的javadoc中,明确指明这个方法是为解析http请求参数特别定义和使用的,在正常的使用中不推荐使用
JSP页面
<body>
<!-- 使用BeanUtils将form参数封装到 JavaBean Person对象中 -->
<!-- "/megustas/demo"为封装数据的Servlet的url -->
<form action="/megustas/demo" method="post">姓名 <input type="text" name="name" /> <br/>城市 <input type="text" name="city" /> <br/>爱好 <input type="text" name="hobby" /> <br/>年龄 <input type="text" name="age" /><br/><input type="submit" value="提交" /><!-- 点击提交,提交的数据即是类中需要的属性 -->
</form>
</body>
JavaBean
public class Person {private String name;private String city;private String hobby;private int age;...}
Servlet
public class DemoServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("utf-8");// 处理乱码// 将form参数 自动封装 Person对象Person person = new Person();try {BeanUtils.populate(person, request.getParameterMap());} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}//检验是否封装到person对象中System.out.println(person.getName());System.out.println(person.getCity());System.out.println(person.getHobby());System.out.println(person.getAge());System.out.println(person.getBirthday());}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
2. BeanUtils.copyProperties(Object dest, Object orig)
将orig中的成员变量的值复制给dest
实体间拷贝
User user = new User();
user.setName("张三");
user.setAge(24);
User user2 = new User();
BeanUtils.copyProperties(user2, user);
System.out.println(user2);//User [name=张三, age=24]
map和实体间的拷贝
User user3 = new User();
Map<String,Object> map = new HashMap<String, Object>();
map.put("name", "李四");
map.put("age", 12);
//把map中的元素拷贝到对象中去(不能把对象放到map中去)
BeanUtils.copyProperties(user3, map);
System.out.println(user3);//User [name=李四, age=12]
3.Converter转换器
当有需要自定义或扩展的Converter 的时候可以通过注册自定义的转换器来实现
例如Beanutil自带的DateConverter不支持String到java.util.Date的转换
,通过扩展DateConverter就可以实现支持
注意:
Converter 是注册在classloader一级的,也就是说在一个class loader中同一时间只能有一个转换器起作用
(BeanUtils的copyProperties和populate会依据目标bean属性的类型来决定启用那个转换器)
自定义一个转换器
public class Str2DateConverter implements Converter {
/*** 将value转换成type类型的值* @param type 要转换成的类型* @parem value 被转换的值* @return 转换以后的结果*/public Object convert(Class type, Object value) {if(value instanceof String){DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");String dateStr = (String) value;//将String解析为 指定Date格式Date date = null;try {date = dateFormat.parse(dateStr);} catch (ParseException e) {throw new RuntimeException("转换失败",e);}return date;}return null;}
注册转换器
//ConvertUtils.register(转换器, 目标类型.class),所有目标类型数据都会进行转换
String birthdayStr = "1991-01-01";
Person p = new Person();
ConvertUtils.register(new Str2DateConverter(), Date.class);BeanUtils.setProperty(p, "birthday", birthdayStr);System.out.println(p);//birthday = Tue Jan 01 00:00:00 CST 1991
使用默认转换器
package org.apache.commons.beanutils.converters
convertUtils.register(new DateConverter(), Date.class);
convertUtils.register(new BooleanConverter(null), Boolean.class);
convertUtils.register(new LongConverter(null), Long.class);
convertUtils.register(new IntegerConverter(null), Integer.class);
convertUtils.register(new DoubleConverter(null), Double.class);
BeanUtils拷贝对象相关推荐
- BeanUtils只拷贝对象中属性值不为null的属性
文章目录 问题 解决方法1(引入hutool包) 解决方法2新增方法 问题 在使用beanutils的copyProperties时候想如果参数为null的就不进行复制; 解决方法1(引入hutool ...
- 50 jQuery拷贝对象与多库共存
技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.jQuery拷贝对象 如果想要把某个对象拷贝(合并)给另外一个对象使用,此时使用$.e ...
- 利用BeanUtils在对象间复制属性
commons-beanutils是jakarta commons子项目中的一个软件包,其主要目的是利用反射机制对JavaBean的属性进行处理.我们知道,一个JavaBean通常包含了大量的属性,很 ...
- Python天天美味(22) - 拷贝对象(深拷贝deepcopy与浅拷贝copy)
Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deep ...
- Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
http://www.jb51.net/article/15714.htm 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...
- jQuery学习笔记系列(三)——事件注册、事件处理、事件对象、拷贝对象、多库共存、jQuery插件、toDoList综合案例
day03 - jQuery 学习目标: 能够说出4种常见的注册事件 能够说出 on 绑定事件的优势 能够说出 jQuery 事件委派的优点以及方式 能够说出绑定事件与解绑事件 能够说出 jQuery ...
- BeanUtils.copyProperties(对象A,对象B)
对于两个实例的复制,如果属性名字相同,则可以通过这个方法来操作,但是在使用的时候,一定要注意BeanUtils用的是哪个包的,因为常用的两个包,都有这个类和对应的方法,而复制方向却相反,所以一定要注意 ...
- 对BeanCopier拷贝对象中List类型属性的思考
背景 最近开发接口过程中,使用BeanCopier拷贝对象,当对象中嵌套自定义对象类型属性的时候, 如果对象名称一致,但是对象类型不一致,拷贝的时候,该属性是会被忽略的,但是当对象中嵌套List集合类 ...
- beanutils copyproperties_你还在用BeanUtils进行对象属性拷贝?
作者:Van_Fan 在做业务的时候,为了隔离变化,我们会将DAO查询出来的DO和对前端提供的DTO隔离开来.大概90%的时候,它们的结构都是类似的:但是我们很不喜欢写很多冗长的b.setF1(a.g ...
最新文章
- LSTM模型与前向反向传播算法
- 成功案例_网络营销成功案例分析
- C# 对轻量级(IoC Container)依赖注入Unity的使用
- 织梦cms仿知名吧站长导航网站模板
- jQuery 的一个自动向上翻页的效果
- 无法设置或未定义null引用的属性innerHTML
- Java 获取指定日期的方法汇总
- docker视频教程 假装听听 应该还行
- RHEL7CentOS7 (精简操作指令)
- 2.3.1 TextView(文本框)详解
- debian8.4安装sqliteman总结
- kubernetesv1.17集群生态搭建笔记
- 配置fly.js请求
- ISE中FIFO IP核的Standard FIFO和First-word-Fall-Through模式的仿真比较
- 计算机 黑屏 显示桌面,电脑开机后显示桌面黑屏了怎么处理啊?
- 微信小程序中用户登录和登录态维护
- .NET Core中Expression<Func<T,bool>>简洁明了
- Rocky——CentOS的延续(原版开发人员)安装与安装后必要操作(个人版)
- 傲娇亚马逊AWS与特色中国的四年大博弈
- 解决欠拟合和过拟合的几种方法
热门文章
- IEC61850概述 (摘抄)
- 2021全球人才竞争力指数排名:瑞士居首,中国跻身前40;德科集团与北京外企成立合资公司LHH FESCO | 美通社头条...
- error#10052:could not checkout FLEXlm license
- 使用Druid,C3P0连接池连接达梦主备集群
- AllWinner T113 ddr测试
- I/O 虚拟化技术 — IOMMU
- 下一次我还来,三星新品发布从未让人失望!
- 陶哲轩实分析:数学家对于R和Q集可数性的探究
- 数据库如何防范隐私数据被泄漏
- Linux系统安装Hexo