使用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.最后

全部控制就可以了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM