通用的将表单数据拷贝到javabean的方法

在做j2ee开发和android客户端开发过程中,经常遇到将表单数据提交,然后拷贝到javabean,继而添加在数据库的问题,这个问题有时候考虑不全面会出现转型失败等等各种问题。下面是一个通用的将表单数据拷贝到javabean的方法,用到了反射。

package com.Util;


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;


 


public class Request2BeanUtil {
     
    /**自动匹配参数赋值到实体bean中
     
     * @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;
        Object obj = null;
        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);//注意此处要求form表单中的属性名字要求与javabean的字段名字相同
                if(StringUtils.isEmpty(value)||value==null){
                    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(Long.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value))
                {
                    m.invoke(bean, Long.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;
            }
        }
    }
}

内容部分引用自http://www.2cto.com/kf/201402/278960.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值