使用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;
	}
}

 

各位大神如果有此问题的解决方案,请在文章下面留言。谢谢!!!

 

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