zoukankan      html  css  js  c++  java
  • 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;
    	}
    }
    



  • 相关阅读:
    vue2.0实践的一些细节
    数据库之一
    angularJS实用的开发技巧
    移动端开发的一些技巧总结(2)
    vue入门学习(基础篇)
    JS继承之原型继承
    css3动画
    使用 xlsx 前端解析 excel 文件
    webpack4 打包 library 遇到的坑
    roc-charts 开发笔记:JS广度优先查找无向无权图两点间最短路径
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053466.html
Copyright © 2011-2022 走看看