zoukankan      html  css  js  c++  java
  • 一个利用pojo类从前端页面request中获取参数的小框架~

    写之前不知道Spring已经实现这样的功能,所以傻傻的写了这个东西!

    实现原理挺有趣的在此记录一下。从去年十月参加java开发以来自己终于有了点小进步。

    好开心。

    解决问题(详解):前端form表单提交过程中我们需要多次从前端获取各个参数。这样不效率,而表单提交过程中的内容绝大多数与pojo类重合,因此我就构想能不能利用pojo类来灵活接收前端信息,在简化代码的同时,让项目更加对象化。

    主要功能:利用pojo类信息接收前端传入的表单信息避免书写代码过多繁杂影响效率。

    代码入下。因为用了公司的内部一些框架所以替换成了

     value=(Integer)request.getAttribute(fieldName)这类东西!应该不影响使用与阅读
    package org.hyena.contract.util;
    
    import java.lang.reflect.Field;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    
    import javax.servlet.http.HttpServletRequest;
    
    public class GetUtil   {
        
        public  <T> T getType(Class<T> classes, HttpServletRequest request){
            T t=classFactiory(classes);
            t=builder(t,request);
            return t;
            
        }
        
        private  <T> T builder(T t, HttpServletRequest request){
            Class classes=t.getClass();
            Field[] fields=(Field[]) classes.getDeclaredFields();
            Method[] methods = classes.getDeclaredMethods(); 
            String methonName="";
            String TypeName="";
            String fieldName="";
            
            Object value=null;
            for(Field f:fields){
                methonName="set"+f.getName();
                //取值
                TypeName=f.getType().getSimpleName();
                fieldName=f.getName();
                if(TypeName.equals("Integer")||TypeName.equals("int")){
                    value=(Integer)request.getAttribute(fieldName);
                }else if(TypeName.equals("Integer[]")||TypeName.equals("int[]")){
                    value=(Integer[])request.getAttribute(fieldName);
                }else if(TypeName.equals("Double")||TypeName.equals("double")){
                    value=(Double)request.getAttribute(fieldName);
                }else if(TypeName.equals("Double[]")||TypeName.equals("double[]")){
                    value=(Double[])request.getAttribute(fieldName);
                }else if(TypeName.equals("String")||TypeName.equals("char")){
                    value=(String)request.getAttribute(fieldName);
                }else if(TypeName.equals("String[]")||TypeName.equals("char[]")){
                    value=(String[])request.getAttribute(fieldName);
                }
                for(Method m:methods){
                    if(m.getName().toLowerCase().contains(methonName.toLowerCase())){
                        //插入值
                        try {
                            m.invoke(t,value);
                        } catch (IllegalArgumentException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IllegalAccessException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (InvocationTargetException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }
            return t;
        }
        
        
    
         /** 
         * 判断是否存在某属性的 set方法 
         *  
         * @param methods 
         * @param fieldSetMet 
         * @return boolean 
         */  
        private  boolean checkSetMet(Method[] methods, String fieldSetMet) {  
            for (Method met : methods) {  
                if (fieldSetMet.equals(met.getName())) {  
                    return true;  
                }  
            }  
            return false;  
        }  
        /**
         * @function 工厂类反射创造对象
         * @param c
         * @return
         */
        private  <T> T classFactiory(Class<T> c){
            T t=null;
            try {
                t=c.newInstance();
            } catch (InstantiationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return t;
        }
    }

    功能并不是太完善太美好,只是作为一个自己的纪念,还有就是有兴趣的玩一玩。

    希望大家善待萌新不要太打击~~~~~~~~~~~

    这个工具类的结构详解:

    传入参数:pojo类对象,request请求。

    结构:

    1利用类对象创建实例。

    2获取类对象的属性数组与方法数组

    3遍历类对象属性,并确定存在set方法。根据属性从前端传入request中获取属性名参数值

      3.1在遍历方法数组获取set方法把之前求的参数值放入对象中

    4返回已经赋值完全的对象

  • 相关阅读:
    第一阶段冲刺第七天
    第一阶段冲刺第六天
    PHPCMS V9.6.0 SQL注入漏洞分析
    metinfo小于v6.2.0版本SQL盲注利用脚本
    metinfo小于v6.2.0版本通杀SQL盲注漏洞分析
    PHPSHE 1.7前台SQL注入漏洞分析
    sqli-labs Less-1~~~Less-23
    内网渗透靶场测试:(二)hash传递和黄金票据
    内网渗透靶场测试:(一)反向代理,互联互通
    intel:spectre&Meltdown侧信道攻击(五)—— DRAM address mapping
  • 原文地址:https://www.cnblogs.com/blackdeng/p/7453357.html
Copyright © 2011-2022 走看看