Java中将request中参数值自动赋值到JavaBean中的几种方法

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

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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值