• 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;
    }
     
  • 相关阅读:
    128. 最长连续序列( 数组背诵题吧)
    310. 最小高度树 (拓扑排序 bfs)
    797. 所有可能的路径(图的遍历)
    sql关于group by和max函数一起使用的坑(同理,求部门最高工资)
    计算正逆序
    886. 可能的二分法(dfs bfs二部图判断)
    java实现RSA加密
    读取logback日志
    logback进阶
    词法分析笔记2
  • 原文地址:https://www.cnblogs.com/wenjing-520/p/9364366.html
Copyright © 2020-2023  润新知