在使用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.最后
全部控制就可以了