一个利用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返回已经赋值完全的对象

原文地址:https://www.cnblogs.com/blackdeng/p/7453357.html