BeanUtils中的自动类型转换(二)

javabean

package entity;

import java.util.Date;
/**
 * 一个测试用:
 * 		student,javaBean
 * @author mzy
 *		一个标准的javaBean:
 *			1) 属性只要是private修饰的;
 *			2) 提供setter和getter方法;
 *			3) 提供无参构造。
 *		就行了;有参构造等不是必须的。
 */
public class Student {
	private int id;
	private String name;
	private double score;
	private boolean gender;
	private Date birth;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getScore() {
		return score;
	}
	public void setScore(double score) {
		this.score = score;
	}
	public boolean isGender() {
		return gender;
	}
	public void setGender(boolean gender) {
		this.gender = gender;
	}
	public Date getBirth() {
		return birth;
	}
	public void setBirth(Date birth) {
		this.birth = birth;
	}
	
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", score=" + score + ", gender=" + gender + ", birth=" + birth
				+ "]";
	}
}
package beanutil;

import java.lang.reflect.InvocationTargetException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;

import entity.Student;
/**
 * BeanUtils:
 * 		内部的自动类型转换。
 * 		字符串->Date类型,注册转化器;
 * 		自定义时间格式,自定义转化器;
 * 
 * @author mzy
 *
 */
public class Demo02 {
	public static void main(String[] args) {
		Student s2 = new Student();
		/**
		 * 注册转换器
		 */
		// 默认的转化器;
		// ConvertUtils.register(new DateLocaleConverter(), java.util.Date.class);
		// 自定义一个字符串 -> 日期转化器
		ConvertUtils.register(new MyDateConvert(), java.util.Date.class);
		
		try {
			/*
			 *  bean中可以传入的全是字符串,它内部会自动进行类型转换!
			 *  String -> int
			 *  String -> boolean
			 *  String -> double
			 *  等都是ok的; 这些都是内置的转化器;
			 *  
			 *  但是内置转换器,默认情况下不支持:字符串->日期,转换!
			 *  如果想要进行字符串日期转换的话,要手动注册一个转化器。
			 */
			BeanUtils.copyProperty(s2, "id", "2");
			BeanUtils.copyProperty(s2, "name", "jacky");
			BeanUtils.copyProperty(s2, "gender", "true");
			BeanUtils.copyProperty(s2, "scroe", "90.23"); 
			// BeanUtils内置的转化器,只支持使用: YYYY-MM-dd的格式,而且后面不能有具体的时间: 16:11:30
			// BeanUtils.copyProperty(s2, "birth","2015-06-24");
			BeanUtils.copyProperty(s2, "birth","2015/06/24 16:11:30");  //String->Date(默认情况,不支持直接从String转为Date)
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		} // 不需要依赖Student对象
		System.out.println(s2);
	}
}

/**
 * 自定义日期转换器,实现转换器的接口
 * @author mzy
 *
 */
class MyDateConvert implements Converter{

	/**
	 * target(src): 转换为 什么类型
	 * value: 需要转换的值
	 * 该方法返回的转换后的值
	 */
	@Override
	public Object convert(Class target, Object value) {
		try {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
			//如果需要转换成Date类型,则进行转换
			if(target==Date.class){
				String date = (String)value;
				//把string按照某种转换Date
				Date curDate = sdf.parse(date);
				return curDate;
			}
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
}



转载于:https://www.cnblogs.com/mzywucai/p/11053466.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值