zoukankan      html  css  js  c++  java
  • java后台使用HttpServletRequest接收参数转换为model

    当前端需要传图片时,后台用MultipartHttpServletRequest接收参数,request接收过来的参数有很多弊端,需要包装成自己的model就得做转化

    弊端:

    1.所接收的参数类型无法判断,全是字符串类型的。其余类型都要转,心累。。。。。

    2.若传入的参数中含有null,undefined的参数则直接变成了字符串“null”和“undefined”。有天突然看见生产库中多了许多“null”,一脸懵逼。。。。

    转化成自己方法的代码:

    
    
    public static <T>T requestParameterToBean(HttpServletRequest request,Class<T> clszz) {
    T obj = null;
    BeanInfo beanInfo=null;
    try {
    //获取该类的信息
    beanInfo = Introspector.getBeanInfo(clszz);
    //实例化该class
    obj = clszz.newInstance();
    } catch (IllegalAccessException e) {
    LOGGER.error("实例化 JavaBean 失败");
    } catch (IntrospectionException e) {
    LOGGER.error("获取分析类属性失败");
    } catch (InstantiationException e) {
    LOGGER.error("实例化 JavaBean 失败");
    }
    //获取该类属性的描述
    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    Enumeration en = request.getParameterNames();
    while (en.hasMoreElements()) {
    String paramName = (String) en.nextElement();
    PropertyDescriptor descriptor;
    for(int i=0;i<propertyDescriptors.length;i++){
    if(paramName.equals(propertyDescriptors[i].getName())&&!"class".equals(propertyDescriptors[i].getName())){
    descriptor = propertyDescriptors[i];
    String className = descriptor.getPropertyType().getName();
    Method method = descriptor.getWriteMethod();
    if (!("undefined".equals(request.getParameter(paramName))||"null".equals(request.getParameter(paramName)))){
    Object value;
    //这里的类型不一一枚举,若传过来的class还有别的类型,在这里加上
    if(className.equals("java.lang.Boolean")){
    value = Boolean.parseBoolean(request.getParameter(paramName));
    }else if(className.equals("java.lang.Integer")){
    value = Integer.parseInt(request.getParameter(paramName));
    }else {
    value =request.getParameter(paramName);
    }
    try {
    method.invoke(obj, new Object[]{value});
    }catch (IllegalAccessException e) {
    LOGGER.error("调用set方法失败");
    } catch (InvocationTargetException e) {
    LOGGER.error("字段映射失败");
    }

    }
    }
    }
    }
    return obj;
    }
     
  • 相关阅读:
    EC6 map 和 set
    git merge 和 rebase 区别
    循环数据forin,foreach,for of
    转 纯CSS设置Checkbox复选框控件的样式
    CSS3特性 盒模型 动画
    正则表达式符号大全
    js中的apply调用
    今天发现了一个同学转发的一个前端面试题,今天转发过来
    正则表达式 实例汇总(待续添加)
    转载 javascript中的正则表达式总结 二
  • 原文地址:https://www.cnblogs.com/wenjing-520/p/9364366.html
Copyright © 2011-2022 走看看