• 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;
    	}
    }
    



  • 相关阅读:
    MVC模式的学生信息增删改查
    常用排序算法
    2803 爱丽丝·玛格特罗依德
    3118 高精度练习之除法
    中秋练习题
    poj2011
    P1558 色板游戏
    P1830 轰炸III
    P1656 炸铁路
    1067 机器翻译
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053466.html
Copyright © 2020-2023  润新知