JavaWeb request封装JavaBean工具类

利用反射机制写的一个工具类,只做了String Integer Float类的自动封装,其他类请自行添加,注释很全

有问题可以评论留言,大家一起讨论

调用实例

Business business =  WebUtils.request2Bean(request,Business.class);

WebUtils.java

import com.neusoft.elm.entity.Business;

import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Enumeration;

/**
 * @author xxy
 * @version 1.0
 * @description:
 * @create 2022/2/22
 **/
public class WebUtils {

    public static <T> T request2Bean(HttpServletRequest request, Class<T> clazz) {
        try {
            T bean = clazz.newInstance();
            //username=aa password=bb email=aa@sina.com
            Enumeration<String> e = request.getParameterNames();
            while (e.hasMoreElements()) {
                String name = e.nextElement();  //username=aaa password=123
                String value = request.getParameter(name);
                if (value != null && value.trim().length() != 0) {
                    setProperty(bean, name, value);
                }
            }
            return bean;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static <T> void setProperty(T bean, String name, String value) {
        Class<?> aClass = bean.getClass();
        Field[] fields = aClass.getDeclaredFields();
        /*
            大概逻辑
            循环bean类所有的变量
              如果变量的类和给出的类一致
                获取到该变量名的setter方法
                  执行获取的setter方法(需将String类型的Value转为对应类型的参数)
         */
        try {
            for (Field field : fields) {
                // String 类型 调用setter方法绑定
                if (field.getGenericType().toString().equals(String.class.toString())) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    if (field.getName().equals(name)){
                        Method m = bean.getClass().getMethod(getMethodName(name), field.getType());
                        // 调用 setter 方法获取属性值
                        m.invoke(bean, value);
                    }
                }
                // Integer
                if (field.getGenericType().toString().equals(Integer.class.toString())) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    if (field.getName().equals(name)){
                        Method m = bean.getClass().getMethod(getMethodName(name), field.getType());
                        // 不是String类需要转换
                        m.invoke(bean, Integer.parseInt(value));
                    }

                }
                //Float
                if (field.getGenericType().toString().equals(Float.class.toString())) { // 如果type是类类型,则前面包含"class ",后面跟类名
                    if (field.getName().equals(name)){
                        Method m = bean.getClass().getMethod(getMethodName(name), field.getType());
                        m.invoke(bean, Float.parseFloat(value));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
        获取getter方法名
        例如:如下方法
        private String name;
        public void setName(String name){this.name=name;}
     */
    private static String getMethodName(String name) {
        return "set" + name.substring(0, 1).toUpperCase() + name.substring(1);
    }

    // 测试
    public static void main(String[] args) {
        Business business = new Business();
        setProperty(business, "remarks", "succes");
        setProperty(business, "orderTypeId", "1");
        setProperty(business, "deliveryPrice", "1.10");
        System.out.println(business);
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值