使用BeanUtils把map轉爲bean時,使String類型轉爲到Date類型

當bean中的變量類型沒有日期類型(即java.sql.Date或者java.sql.Date),變量類型全爲int或者String類型時,所有的bean都可以使用以下的通用方法,沒有一點毛病。

	import java.lang.reflect.InvocationTargetException;
	import java.sql.Date;
	import java.text.SimpleDateFormat;

	import java.util.Map;

	import javax.servlet.http.HttpServletRequest;
	import javax.servlet.http.HttpServletResponse;
	import javax.servlet.http.HttpSession;

	import org.apache.commons.beanutils.BeanUtils;

	import com.ctcc.dt_telecom.bean.User;

public class WEBUtils{



/**
	 * 將map類型轉換爲bean
	 * @param request
	 * @param t
	 * @return
	 */
	public static <T> T paramToBean(HttpServletRequest request,T t) {
		//通過request從服務器獲取參數的map集合
		Map<String, String[]> map = request.getParameterMap();
		try {
			//使用BeanUtils.populate 將map轉爲bean
			BeanUtils.populate(t, map);
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return t;
	}

但是,當bean裏面有日期類型是,就會出現轉換異常的錯誤,這個讓我很難受,查了很多資料。終於找到了方法,也就是我前面發的這篇帖子裏面提到的方法。

https://blog.csdn.net/m0_38022029/article/details/81348431

但是上面帖子裏面的方法只能將 map中的字符串類型轉爲 java.util.Date類型。

而oracle數據庫中的Date爲java.sql.Date,因爲Bean 中的類型也爲java.sql.Date類型

用以上方法將 String轉爲 java.sql.Date類型時,雖然不會報錯,但是它會讓該變量爲null ,而且該變量後面的變量也都爲null.

所有這個方法不行,

由於開發時間有限,我現在無法再去研究這些問題 ,於是自己想到了一個很土的解決方案。以下方案雖然有效,但是不夠通用,會產生很多重複的代碼


	/**
	 * 將map轉爲user
	 * 思路:
	 * 1.將前端input 中有關日期的name都改爲別名,即在原名前面加1,
	 *   所以該值在使用BeanUtils.populate(user, map) 轉換時就會爲null,不會出現問題
	 * 2. 再用request.getParameter獲取未轉換的日期類型,用SimpleDateFormat手動將string轉爲java.util.sql
	 * 3.使用 new java.sql.Date(long)的方法,將java.util.Date轉爲ava.sql.Date方法
	 * 4.再使用BeanUtils.setProperty將其存進user中
	 * 
	 * @param request
	 * @param user
	 * @return
	 */
	public static User paramToBean(HttpServletRequest request,User user) {
		Map<String, String[]> map = request.getParameterMap();
		String birthday1=request.getParameter("birthday1");
		String hiredate1=request.getParameter("hiredate1");
		
		SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd");
		try {
			BeanUtils.populate(user, map);
			if(birthday1 != null && birthday1 !="") {
				Date birthday =new Date(simpleDateFormat.parse(birthday1).getTime());
				BeanUtils.setProperty(user, "birthday", birthday);
			}
			if(hiredate1  !=null && hiredate1 !="") {
				Date hiredate =new Date(simpleDateFormat.parse(hiredate1).getTime());
				BeanUtils.setProperty(user, "hiredate", hiredate);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} 
		return user;
	}
}

 

各位大神如果有此問題的解決方案,請在文章下面留言。謝謝!!!

 

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