码迷,mamicode.com
首页 > 编程语言 > 详细

java中将param的值自动存到bean中

时间:2015-06-05 11:34:35      阅读:126      评论:0      收藏:0      [点我收藏+]

标签:

转自: http://www.2cto.com/kf/201402/278960.html

 

本文前提:参数名称与实体属性一致!

Java的Web项目中,经常有servlet中接收参数赋值给实体,参数如果多了就很麻烦,这里提供两个简单通用的方法:

比如实体为Student

1.使用org.apache.commons.beanutils.BeanUtils:

  
  Student stu = new Student();
  BeanUtils.populate(stu, request.getParameterMap());

 

当然实际工作中,有些参数值为空或者参数类型与实体属性类型不匹配,这就会报异常,因此这个不太可靠,这时可以用方法3

2.利用反射:

获得所有set方法,排除掉Object基类本身的set方法,从get方法中可以得到属性名,而属性名即是request的参数名

 

3.(最推荐,经过测试) 改装populate方法:

import java.lang.reflect.Method;
import java.util.Date;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.time.DateUtils;
 
/**Servlet业务中实体工具
 * @author LiuDing
 * 2014-2-16-下午08:10:06
 */
public class ServletBeanTools {
     
    /**自动匹配参数赋值到实体bean中
     * @author LiuDing
     * 2014-2-16 下午10:23:37
     * @param bean
     * @param request
     */
    public static void populate(Object bean, HttpServletRequest request){
        Class<!--? extends Object--> clazz = bean.getClass();
        Method ms[] = clazz.getDeclaredMethods();
        String mname;
        String field;
        String fieldType;
        String value;
        for(Method m : ms){
            mname = m.getName();
            if(!mname.startsWith("set")
                    || ArrayUtils.isEmpty(m.getParameterTypes())){
                continue;
            }
            try{
                field = mname.toLowerCase().charAt(3) + mname.substring(4, mname.length());
                value = request.getParameter(field);
                if(StringUtils.isEmpty(value)){
                    continue;
                }
                fieldType = m.getParameterTypes()[0].getName();
                //以下可以确认value为String类型
                if(String.class.getName().equals(fieldType)){
                    m.invoke(bean, (String)value);
                }else if(Integer.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
                    m.invoke(bean, Integer.valueOf((String)value));
                }else if(Short.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
                    m.invoke(bean, Short.valueOf((String)value));
                }else if(Float.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
                    m.invoke(bean, Float.valueOf((String)value));
                }else if(Double.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
                    m.invoke(bean, Double.valueOf((String)value));
                }else if(Date.class.getName().equals(fieldType)){
                    m.invoke(bean, DateUtils.parseDate((String)value, "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"));
                }else{
                    m.invoke(bean, value);
                }
            }catch(Exception e){
                e.printStackTrace();
                continue;
            }
        }
    }
}

 

 

Java中将param的值自动存到bean中

 
 

java中将param的值自动存到bean中

标签:

原文地址:http://www.cnblogs.com/mr-level/p/4553875.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!