第一种写法
getParamterNam()
public static <T> T request2bean(HttpServletRequest Request,Class<T> beanClass){
try{
T formbean=beanClass.newInstance();
Enumeration<String> ps=Request.
getParameterNames();
while(ps.hasMoreElements()){
String name=ps.nextElement();
String value=Request.getParameter(name);
BeanUtils.setProperty(formbean, name, value);
}
return formbean;
}catch(Exception e){
throw new RuntimeException(e);
}
} 第二种写法 getParameterMap() public static <T> T request2bean(HttpServletRequest Request,Class<T> beanClass){ try { T formbean=beanClass.newInstance(); Map map=Request. getParameterMap(); BeanUtils.populate(formbean, map); return formbean; } catch (Exception e) { throw new RuntimeException(e); } } 转换器的定义(是否要转换器,要看Class<T> beanClass中 变量类型, HttpServletRequest Request接收来的都是String )
ConvertUtils.register(new Converter(){
public Object convert(Class type, Object value) {
if(value==null){
return null;
}
String str=(String)value;
if(str.trim().equals("")){
return null;
}
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}, Date.class);
注意getParameterMap使用时,要注意几点(不知道是不是版本的问题):
1.如果getParameterMap取到的参数名,而在formbean中找到相应的字段时,就会报错。
我的处理方式:查找出map中需要的字段,存储到一个新的returnmap中,然后返回returnmap,代码如下,
T bean=beanClass.newInstance();
Map map=request.getParameterMap(); Map returnmap=new HashMap(); 以下代码是考虑用迭代器的remove方法移除不要的字段,但测试不成功,不知道什么原因 /*Iterator<Map.Entry<String,Object>> it=map.entrySet().iterator(); while(it.hasNext()){ Map.Entry<String, Object> entry=it.next(); System.out.println(entry.getKey()); System.out.println(entry.getValue()); /*if("method".equals(entry.getKey())){ it.remove(); } //entry.getValue(); }*/ Set<Map.Entry<String, String[]>> entry=map.entrySet(); for(Map.Entry<String, String[]> item:entry){ if("method".equals(item.getKey())){ continue; } System.out.println("item.getKey()="+item.getKey()); System.out.println(item.getValue().length); System.out.println(item.getValue()[0]); returnmap.put(item.getKey(), item.getValue()); } BeanUtils.populate(bean, returnmap); return bean; 2.getParameterMap获取的字段可以比formbean中的字段少(但不能多,即上面的情况),3.对于基本数据类型能过BeanUtils的getParameterMap方法获取数据,可以不用考虑数据类型,而直接用BeanUtils.populate(bean, returnmap),否则要自定义类型注册器
|
request2bean两种写法,及getParameterMap()时的问题
猜你喜欢
转载自blog.csdn.net/dhzbkj/article/details/80555304
今日推荐
周排行