关于java中beanutils的自定义时间转换器的笔记

今天在学习工具beanutils时候遇到一个问题,基本情况是这样的

定义了一个Javabean:Student,其中一个属性是Date类型的birthday,使用BeanUtils.copyProperty(bean, name, value)方法的时候遇到要拷贝时间类型进入Student中

copyProperty方法在源码中实现了对value是字符串情况的默认转换,可以将字符串转换为int,boolean等等,但是不支持时间日期类型的默认转换,所以要自定义一个日期类型的转换器并进行注册,下面是代码:

				//通过类路径,反射得到一个对象,然后再对其属性进行操作
				Object s = Class.forName("com.thunder.test.beanutils.Student").newInstance();
				/**
				 * beanutils的copyproperty方法内部将不合适的类型可以转换成对应的类型
				 * 即可以将下面的id(int类型的)用,字符串传入;
				 * 但是默认的日期转换器不能把字符串转换成日期类型,所以我们要自己注册一个可以办到的日期转换器
				 * */
				ConvertUtils.register(new MyConverter(), Date.class);//这里是注册转换器的语句,注册的是自定义的转换器对象
				BeanUtils.copyProperty(s, "id", "4");
				BeanUtils.copyProperty(s, "name", "jack");
				BeanUtils.copyProperty(s, "gender", "true");
				BeanUtils.copyProperty(s, "birth", "2016/05/12 16:20:12");
				
				System.out.println(s);

自定义转换器里面定义的时间格式是需要匹配在copyProperty中输入的时间格式,将该格式的字符串通过格式化之后的sdf对象转换为时间对象并返回,即可达到输入时虽然是字符串但是返回是Date对象的目的,那么注意了,还有一个问题,就是虽然Javabean中的成员变量是Date类型的,但是输出的时间格式对用户并不友好,不是常用的格式,为了解决这个问题,我们可以在toString中进行一下处理(在将全部变量都输出的情况下):重新定义你想要的时间的格式,再次通过格式化时间对象(返回的 是字符串类型)输出该字符串。如果是单独输出该时间类型的变量那就单独处理一下吧,总之在不将Date对象处理为String类型的对象的前提下,输出的Date对象都是非友好格式的

下面是自定义的转换器:

//自定义一个日期转换器
class MyConverter implements Converter {

	@Override
	public Object convert(Class type, Object value) {
		//定义一个日期格式
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
		//判断是否是要转换成日期格式
		if(type==Date.class) {
			String date = (String)(value);
			try {
				Date curDate = sdf.parse(date);
				return curDate;
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		return null;
	}
	
}
下面是处理toString的代码:

public String toString() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
		return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", scores=" + scores + ", birth="
				+  sdf.format(birth)//这是一个字符串类型的格式化日期时间
				+ "]";
	}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值