BeanUtils中的自動型別轉換(二)
阿新 • • 發佈:2019-02-08
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; } }