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

全部控制就可以了

 

posted @ 2014-11-01 11:25  小阿摩  阅读(3452)  评论(0编辑  收藏  举报