自定义拦截器

来源:互联网 发布:win10 软件显示乱码 编辑:程序博客网 时间:2024/05/18 13:26
/**
* 拦截器表示 在action被调用之前  
*   true表示继续调用action
*   false 中断调用
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HandlerMethod hm=(HandlerMethod)handler;
//action的实例
Object myObject=hm.getBean();
// user的结构
Field[] f=myObject.getClass().getDeclaredFields();
for(Field f1:f){
f1.setAccessible(true);
//获取  字段名 user
String name=f1.getName();
//获取字段 user的实例
Object obj=f1.get(myObject);
if(obj==null){
obj=f1.getType().newInstance();
f1.set(myObject, obj);
}
// 枚举所有的参数名称 user.userName=zs&user.password=123456&age=12
Enumeration<String> enu=request.getParameterNames();
while(enu.hasMoreElements()){
String paramName=enu.nextElement();
if(paramName.indexOf(".")>=0&& paramName.startsWith(name)){
// paramName 是 user.userName  paramValue 是 zs
String paramValue=request.getParameter(paramName);
//获取到.  userName
String pName=paramName.split("\\.")[1];
Field ff=obj.getClass().getDeclaredField(pName);
ff.setAccessible(true);
ff.set(obj, paramValue);
}


if(paramName.equals(name)){
// paramName 是 user.userName  paramValue 是 zs
String paramValue=request.getParameter(paramName);
//获取到.  userName
Field ff=myObject.getClass().getDeclaredField(paramName);
ff.setAccessible(true);
ff.set(myObject, paramValue);
}
}
}

return true;
}
原创粉丝点击