BeanUtils註冊數據轉化類型

	/**
	 * 實際運用2:由於BeanUtils只支持8種基本數據類型的轉換,因此要實現其他類型的轉化,就需要註冊該類型的轉換器。自定義轉換器
	 * 
	 */
	public static void test03() {
		// 使用ConverUtils對象的register()方法來註冊類型轉換器
		// 1、第一個參數爲實現了Converter接口的對象,第二個參數爲要註冊的類型的class對象。
		// 2、因此需要使用匿名內部類的方式重寫Converter的converter方法。
		// 3、該方法最有有BeanUtils的setProperty()來調用
		ConvertUtils.register(new Converter() {
			// arg0這種情況產生的原因是因爲沒有導入源碼
			/*
			 * public Object convert(Class arg0, Object arg1) { // TODO
			 * Auto-generated method stub return null; }
			 */
			@Override
			public <T> T convert(Class<T> type, Object value) {
				// 1、先對value進行判斷。看看是否符合條件
				if (value == null) {
					return null;
				}
				// 2、對value的值進行判斷,因爲我們要轉換的是String類型的
				if (!(value instanceof String)) {
					// 不是String,將該錯誤拋給調用他的方法
					throw new ConversionException("值支持String類型的轉換!");

				}
				// 3、如果1、2都沒錯誤進行第三步,判斷value是否全是空格
				String string = (String) value;
				if (string.trim().equals("")) {
					return null;
				}
				// 4、將含有值得字符轉轉換爲日期
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
				Date date = null;
				try {
					date = (Date) df.parse(string);
				} catch (ParseException e) {
					// 將異常拋給下一級必須加上e——異常鏈不能斷。
					throw new RuntimeException(e);
				}

				return (T) date;
			}

		}, Date.class);

		Person p = new Person();
		String date = "1992-09-12";
		try {
			BeanUtils.setProperty(p, "date", date);
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(p.getDate());
	}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章