使用Aop管理所有Valid结构bindingResult
在使用springMVC的时候有用到Valid注解,也就对应着有了多个BindingResult。
而有时候Validator规则是在bean里面定义的,这个时候bindingResult就是自动验证后的结果,并且结构都大同小异
if(bindingReuslt.getAllerror().size()>0){
//然后是错误消息提示
//然后返回等等一系列操作
}
有的时候我们是异步数据交互,返回错误数据格式一模一样。所以也就导致了每个验证里面有同样的代码出现造成了代码冗余。
为了解决这样的问题,想过用拦截器或者基类强制控制,不过效果都不是很好,后来又想到用AOP,发现效果挺好的。
现在贴上AOP代码
1.首先springXML文件
<bean id="bindingResultAop" class="com.xiaokuaimei.core.aop.BindingResultAop"/> <aop:config> <aop:pointcut id="bindingResultAopPC" expression="execution(* com.xiaokuaimei.controller.hiring.*.*(..) )"/> <aop:aspect id="controllerAspect" ref="bindingResultAop"> <aop:around method="around" pointcut-ref="bindingResultAopPC"/> </aop:aspect> </aop:config>
2.BindingResultAOP类
目前是统一返回json格式字符串。
/** * 主要针对于controller 方法验证。 * 使用方法: 参数中添加@Vaild注解与BindingResult。然后自动验证。 * 如果验证失败:然后json字符串 {result:false,message:'java bean中验证message'} * User: zhoujingjie * Date: 14-10-31 * Time: 下午4:06 */ public class BindingResultAop { /** * @param joinPoint * @return * @throws Throwable */ public Object around(ProceedingJoinPoint joinPoint) throws Throwable { BindingResult bindingResult = null; for(Object arg:joinPoint.getArgs()){ if(arg instanceof BindingResult){ bindingResult = (BindingResult) arg; } } if(bindingResult != null){ List<ObjectError> errors = bindingResult.getAllErrors(); if(errors.size()>0){ StringBuilder msg = new StringBuilder(); for(ObjectError error :errors){ msg.append(error.getDefaultMessage()); msg.append("\n"); } return new JSONView(new _HashMap().add("result",false).add("message",msg.toString())); } } return joinPoint.proceed(); } }
3.最后
全部控制就可以了