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

刚开始使用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.csdn.net/user/fableking/

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

你可能感兴趣的:(让BeanUtils的copyProperty方法支持String与java.util.Date的类型转换)