关于org.springframework.beans.BeanUtils.copyProperties使用过程中遇到的bug

最近在项目中使用BeanUtils.copyProperties拷贝不同实体类的时候,出现了一个关于时间上的问题,具体的情况是source中的时间格式是yyyy-MM-dd HH:mm:ss,其数据也是正常精确到时分秒的,但是拷贝之后的时间,其时分秒的数据却丢失了,变成了yyyy-MM-dd 00:00:00,这种形式。

最开始以为是BeanUtils对时间类型的处理有问题,后来自己单独写了一下,发现并不是BeanUtils处理的问题,于是开始翻源码,发现BeanUtils是通过获取所有的get和set方法来对字段属性进行copy的,也就是说,无论实体类中是否有这个字段属性,只要包含get和set方法就一定会被copy。也就是BeanUtils要求的必须要有get和set方法。

public static class Source{
		private Date date;

		public Date getDate() {
			return date;
		}

		public void setDate(Date date) {
			this.date = date;
		}
	}

	public static class Target{
		private Date date;

		public Date getDate() {
			return date;
		}

		public void setDate(Date date) {
			this.date = date;
		}
	}

	public static void main(String[] args) {
		Source source = new Source();
		source.setDate(new Date());
		Target target = new Target();
		BeanUtils.copyProperties(source,target);
		System.out.println(source.getDate());
		System.out.println(target.getDate());
	}

        于是检查了项目中的get和set方法,发现了其中确实包含了一个单独的get和set方法,正是针对时间字段进行处理的,其set方法正是格式化时间为yyyy-MM-dd,于是,在调用BeanUtils时,调用了另一个重载的方法,将那个单独的get和set方法对应的字段作为需要忽略的字段处理,跳过调用其get和set方法,果然,结果正常了。

BeanUtils.copyProperties(source,target,"gainDateString");

        第三个参数即为要忽略的字段,可以传多个。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值