zoukankan      html  css  js  c++  java
  • 关于@Valid 不生效的问题

    当在controller 中使用@Valid+ BindResult 和在参数实体中使用@NotNull,@NotEmpty等注解进行参数验证,

    最后通过接口调用却正常进入方法体内没有进行参数验证的情况,

    原因在于

    1:BindResult封装了参数验证抛出的异常,也就是说异常被抛出但异常被捕获到了,并被封装到BindResult中,因此方法会继续执行;

    2:我们另外写了统一异常处理类处理了异常

    解决方法:

    1:统一处理BindResult,打印出BindResult的信息;我的处理如下

    注意切面的位置和BindResult的位置

    package com.crm.admin.interceptor;
    
    import java.util.List;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.core.annotation.Order;
    import org.springframework.stereotype.Component;
    import org.springframework.validation.BindingResult;
    import org.springframework.validation.ObjectError;
    
    import com.crm.admin.exception.ParameterIllegalException;
    
    
    /**
     * 检查入参合法性
     */
    @Aspect
    @Component
    @Order(1)
    public class ValidParamAspect {
    
        // Controller层切点
        @Pointcut("execution (* com.crm.admin.controller..*.*(..))")
        public void aspect() { }
    
        @Before("aspect()")
        public void doBefore(JoinPoint jp) throws Throwable {
            Object[] args = jp.getArgs();
            if(args != null && args.length > 1 ) {
                //取出第2个参数
                Object obj = jp.getArgs()[1];
                if(obj instanceof BindingResult) {
                    BindingResult bindingResult = (BindingResult)obj;
                    // 校验返回错误集合中的第一个错误信息
                    if (bindingResult.hasErrors()) {
                        List<ObjectError> errors = bindingResult.getAllErrors();
                        throw new ParameterIllegalException(errors.get(0).getDefaultMessage());
                    }
                }
            }
        }
    
    }

    2:自行检查全局异常处理类的处理逻辑

  • 相关阅读:
    paraview添加vector
    origin横纵坐标颠倒
    [转] python提取计算结果的最大最小值及其坐标
    康奈尔大学CFD课程
    anaconda多环境配置
    mfix的Negative gas density报错解决
    python基础补漏-01
    ssh 公钥登陆的问题
    多进程
    关于GIL
  • 原文地址:https://www.cnblogs.com/yunian139/p/11865151.html
Copyright © 2011-2022 走看看