使用Aop管理所有Valid结构bindingResult

本文介绍如何使用AOP解决SpringMVC项目中因多次验证造成的代码冗余问题。通过配置AOP切面,当控制器方法使用@Valid注解进行参数验证时,若验证失败则统一返回特定格式的JSON字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

全部控制就可以了

 

转载于:https://www.cnblogs.com/zhoujingjie/articles/4066597.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值