0
点赞
收藏
分享

微信扫一扫

JavaWeb request封装JavaBean工具类

云竹文斋 2022-02-22 阅读 58

利用反射机制写的一个工具类,只做了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(
                                "set" + 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(
                                "set" + 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(
                                "set" + getMethodName(name), field.getType());
                        m.invoke(bean, Float.parseFloat(value));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /*
        获取首字母大写的变量名
        例如:如下方法
        private String name;
        public void setName(String name){this.name=name;}
     */
    private static String getMethodName(String name) {
        return 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);
    }
}

举报

相关推荐

JavaBean封装

JavaWeb(10)JavaBean

JavaWeb08application&JavaBean

封装JDBC工具类

Java application&&JavaBean封装

0 条评论