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