让BeanUtils的copyProperty方法支持String与java.util.Date的类型转换

Spring的BeanUtils.copyProperties的坑 如果需要将源对象中的属性拷贝到目标对象中,包括目标对象中继承自父类的属性,可以使用其他的 Java 对象映射工具,比如 Hutool的 BeanUtil、Apache Commons BeanUtils 和 Dozer 等。 阅读详情

刚开始使用BeanUtils的copyProperties的bean属性复制方法

结果发现它复制属性的时候,只支持java.sql.Date与String的类型转换,但是由于我们的pojo是使用java.util.Date的类型地,而由于form中的同名属性由于可以为空,所以不能使用Date类型,否则会报错,于是我们在form中的Date一致采用了String的类型,现在在使用BeanUtils的copyProperties的方法时就不行了,会报错。。。

在一番权衡下,最后决定修改apache的BeanUtils包的源代码。

花了大概半小时看了一下BeanUtils的copyProperties方法的实现 发现原来BeanUtils其实只是一个工厂,真正实现复制的是BeanUtilsBean类,跟踪进去后看了看,其实这里调用的是它本身的copyProperty方法迭代复制属性实现的。

实现方法大致是这样: 首先它是获得目标Bean的属性类型,然后在一个置入了多个class为key,对应转换类为值的map中,该map名为converters,在其中寻找与之class类匹配的转换类,然后通过该类将源Bean的属性转换成目标Bean的类属性,之后set入即可。

根据他的源代码,对该包做了一小部分的修改,首先是在converters中加入了一个java.util.Date的类,然后在converters包中加入了一个名为UtilDateConverter的类,用于对Date的转换。然后又修改了其中的StringConverter类,使其支持了对Date转换成日期格式的字符串,分别支持精确到日以及精确到秒的两种长度。

 

以下是我的资源地址: http://download.youkuaiyun.com/user/fableking/

有需要的朋友可以去下载我修改源码后重新打的包,名为commons-beanutils-jesse.zip 其中包括了一个简单的demo。这个包可以直接用来替换commons-beanutils.jar包

使用 BeanUtils 做属性拷贝,性能有点拉胯! 首先公司内部就遇到过 commons 包的 BeanUtils 进行属性拷贝性能较差的真实案例,然后该同事换成了 Spring 的 BeanUtils 性能好了很多,感兴趣大家可以使用性能测试框架或者基准测试框架去对比,这里就不对比了。因此慎用属性转换工具,如果可能建议自定义转换类,使用 IDEA插件自动填充,效率也挺高, A 或 B 中任何属性类型不匹配,甚至删除一个属性,编译阶段即可报错,而且直接调用 get set 的效率也是非常高的。这就导致在使用很多属性映射工具时,编译时不容易明显的错误。... 阅读详情

相关推荐

【Java】Spring中BeanUtils.copyProperties的坑及解决

如果需要将源对象中的属性拷贝到目标对象中,包括目标对象中继承自父类的属性,可以使用其他的 Java 对象映射工具,比如 Hutool的 BeanUtil、Apache Commons BeanUtils 和 Dozer 等。方法是基于 Java 反射实现的,它可以将源对象中的属性拷贝到目标对象中,并支持类型转换和自定义转换器。方法是基于 Java 反射实现的,它只能访问源对象中的属性,无法访问目标对象中继承自父类的属性。方法进行属性拷贝时,只会拷贝源对象中定义的属性,而不会拷贝目标对象中继承自父类的属性。

wjianwei666的专栏 5317

【踩坑系列】使用BeanUtils.copyProperties踩坑经历

使用BeanUtils.copyProperties踩坑经历。

申城异乡人 6405

【深度排查】VScode 远程 SSH 连接失败:从网络握手到服务部署的全链路诊断指南

本文详细解析了VScode远程SSH连接失败的常见原因及解决方案,从基础网络排查到SSH服务配置,再到VScode特有的问题处理。特别针对Ubuntu和TrueNAS系统提供了具体配置建议,帮助开发者快速解决'Could not establish connection'等连接问题,提升远程开发效率。

weixin_30301449的博客 446

Bean Copy将date转换成String

public class MyBeanUtils { static final SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); static { //注册时间转换器 使得BeanUtils可以将date转换成指定格式String ConvertUtils.register((type, value) -> { if (value in

weixin_42930033的博客 959

手把手教你用WF100DPZ数字压力传感器搞定I2C/SPI通信(附完整寄存器解析)

本文详细解析了WF100DPZ数字压力传感器的I2C与SPI通信驱动方法,涵盖硬件连接、寄存器配置、数据读取流程及常见问题排查。该传感器内置24位ADC和出厂校准,通过实战代码演示了如何稳定获取高精度压力与温度数据,帮助开发者快速集成到嵌入式项目中。

weixin_28285943的博客 377

别再为H桥烧MOS管发愁了!手把手教你用IR2104搭建稳定电机驱动(附自举电路详解)

本文详细解析了使用IR2104半桥驱动芯片构建高可靠H桥电机驱动电路的全过程。从芯片内部架构、自举电路原理到PCB布局技巧和实战调试方法,帮助工程师彻底解决MOS管烧毁问题。重点讲解了自举电容选型、死区时间控制等关键设计要点,并附有示波器实测波形分析,是电机驱动设计的实用指南。

我的博客 739

对commons-beanutils-jesse包的再更新

 之前写过的关于让BeanUtils的copyProperty方法支持String与java.util.Date的类型转换的文章的源码在更新过一次之后[更新详情请查看http://blog.csdn.net/fableking/archive/2008/07/17/2666803.aspx],我一直都没看过今天回头来看了下,发现了一个小问题,所有Date转换为String的时候只能转换为短日期

天涯 书塾 764

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1546

对于之前commons-beanutils-jesse包的更新

上次写了对commons-beanutils包的源码作更改以支持对Date与String之间相互转换的一篇文章详情请点击:让BeanUtils的copyProperty方法支持String与java.util.Date的类型转换 结果今天使用时发现,BeanUtils.copyProperty不支持对null值的Date转换,这才突然觉得这个功能是有必要写进去的,不能让他抛出异常,原来只要是nul...

天涯书塾 83

SAP 批次管理

批次管理: 业务场景: 批次常用于:采购、生产、SD等: 1、先进先出,先入库的先出库(如何实现),基于入库时间来自动确定出库策略。 2、追塑:基于批次进行产品质量追溯 例如订单MTO ---> PP ----> MM(批次关联)。SO—>PP工单 --> 预留 --> 发料(基于批次A\B\C)-->产成品入库-->批次入库D--> ...

willieyuan的博客 1万+

RK3568笔记五十四:SORT实时目标追踪

YOLOv5具备目标检测的功能,把视频分解成多幅图像并逐帧执行时,如果视频帧中有多个目标,如何知道一帧中的目标和上一帧是同一个对象就是目标跟踪的工作。DeepSort是实现目标跟踪的算法,从sort(simple online and realtime tracking)演变而来,使用卡尔曼滤波器预测所检测对象的运动轨迹,匈牙利算法将它们与新的检测目标相匹配。结合YOLOv5和DeepSORT可以在实时场景中实现高效的目标检测和跟踪。

789

BeanUtils.copyProperties扩展--String转Date

BeanUtils.copyProperties(target,source)和PropertyUtils.copyProperties(target,source)都能将源对象的属性的值拷贝到目标对象相同属性名中。 区别在于:    BeanUtils.copyProperties(target,source)支持基础类型、String、java.sql.Date、java.sql.Time

风火一回,一生不毁 1万+

1.2 博图TIA的轨迹(Trace)功能介绍

在TIA中“轨迹” ( Traces ) 能来记录设备变量并对记录进行评估,对有些故障排查很有帮助,本文进行介绍

qq_34047402的博客 1646

BeanUtils的使用和数据类型转换

在以上示例中,使用BeanUtils.copyProperties方法将user的属性值赋值给userVo时,会自动进行数据类型转换,将User中的int和Date类型属性值转换成String类型,赋值给UserVo。JavaWeb BeanUtils是一个Java类库,可以将一个JavaBean中的属性值拷贝到另一个JavaBean中。数据类型转换是BeanUtils的一个常见应用场景,在JavaBean属性赋值时,使用BeanUtils可以自动进行数据类型转换。

m0_70242615的博客 808

HQChart实战教程64-自定义分时图标题栏

分时图标题栏显示的是当前十字光标所在位置的分钟信息,显示在分时图窗口顶部。一般会显示品种的名称,日期,时间,价格,均价 涨幅,成交量,金额等等,hqchart内置会显示这些信息。如果要额外显示其他的字段,就需要通过替换格式化标题输出函数来是现实。我们在hqchart实例创建完成以后,通过OnCreatedCallback回调函数替换自己的格式化输出函数。返回 { AryText:[ { Text:文字, Color:颜色},…入参 data={ Data: 当前十字光标所在位置的分钟线 }

小银 1056

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

BeanUtils.copyProperties 如果Integer 或Long 为null 默认赋值0

  BeanUtils.copyProperties(A,B); 如果B中的Integer类型的数据是null的,那么通过这个方法复制给A后,这个null的Integer数据会变成0。 也就是它有自己的规则,如果发现Integer类型的数据如果是null的,它会自作多情的给个默认值! 这个自作多情是很让开发人员反感的!比如Integer类型的数据=null是一个逻辑业务,但是经过复制后之前...

无忌 1202

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

使用BeanUtils设置属性转换String到Date类型

主要是用来设置非空对象的属性。 1 使用BeanUtils进行设置属性时,对于String,int可以自动转换。比如下面的例子 常用方法 1)BeanUtils.setProperty ////复制属性到对象中 2)BeanUtils.copyProperties //复制属性到对象中 3)BeanUtils.populate(bean, properties)...

diaolong123123的博客 1056

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

java中使用BeanUtils.copyProperties方法对象复制同名字段类型不同赋值为空问题解析

对象之间的复制,dto对象中字段类型为String,model中字段类型为BigDecimal。使用BeanUtils.copyProperties方法进行对象批量复制。

空空 8530

BeanUtils.copyProperties() 报类型转换异常的一种解决方法

BeanUtils.copyProperties() 报类型转换异常的一种解决方法

xsqmxr的博客 2028

Beanutils.copyProperties( )使用遇到的问题

Beanutils.copyProperties( )使用遇到的问题 BeanUtils.copyProperties VS PropertyUtils.copyProperties 两者最大的区别是: BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。 既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProperties。 因此,PropertyUtils

wangjianweiaaa的博客 4212

踩BeanUtils.copyProperties深度对象转换的坑以及\方案

BeanUtils.copyProperties对象转换的坑,以及解决方案

运气不好努力来凑 1134

bug宝典JAVA篇 BeanUtils.copyProperties 日期问题

执行BeanUtils.copyProperties(dest, orig);的时候出现下面的错误,我的代码如下,主要目的是复制对象,但是又不想一个个set,下面的BeanUtilsExtends是照着copyproperties 谁赋值给谁抄的,实际运用却出现下面的问题@Transactional(readOnly = false) private boolean createNewRec

warrah 南极狼 6135

BeanUtils.copyProperties时日期的拷贝

      首先定义一个Converter的Date实现类import java.util.Date;import org.apache.commons.beanutils.ConversionException;import org.apache.commons.beanutils.Converter;import cn.sh.cares.commons.excel.util.Excel

4482

maven alibaba JSON的依赖架包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> ...

孙小白 5万+

hutool的BeanUtil.copyProperties复制枚举类属性大坑

hutool的BeanUtil.copyProperties复制枚举类属性报错:Can not convert XXX to XXX。

qq_36065688的博客 6407
上一篇: BeanUtils的copyProperties方法不能复制非public声明类的属性
下一篇: Hibernate fetch lazy cascade inverse 关键字
fableking
博客等级 码龄20年 35粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值