写之前不知道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返回已经赋值完全的对象