数据校验

作者: 异步_缓存_队排好 | 来源:发表于2019-05-29 20:50 被阅读0次

JSR303

SpringMVC支持使用JSR303进行快速校验,我们只需要给需要校验的bean加上响应的校验注解即可

使用步骤:

  • 给Controller方法参数对象加上校验注解
  • 加上@Valid声明需要校验
  • 咱需要检验的参数后面紧跟一个BindingResult,即可获取到校验结果
  • 判断校验结果是否出错,进一步来决定业务逻辑

基于AOP统一校验

1、基于AOP方式,统一获取校验错误并封装返回
@Aspect
@Component
@Order(2)
public class BindingResultAspect {
    @Pointcut("execution(public * com.gmall.controller.*.*(..))")
    public void BindingResult() {
    }

    @Around("BindingResult()")
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        Object[] args = joinPoint.getArgs();
        for (Object arg : args) {
            if (arg instanceof BindingResult) {
                BindingResult result = (BindingResult) arg;
                if (result.hasErrors()) {
                    return new CommonResult().validateFailed(result);
                }
            }
        }
        return joinPoint.proceed();
    }
}
2、自定义校验注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.PARAMETER})
@Constraint(validatedBy = FlagValidatorClass.class)
public @interface FlagValidator {
    String[] value() default {};

    String message() default "flag is not found";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
3、自定义校验注解解析器
public class FlagValidatorClass implements ConstraintValidator<FlagValidator,Integer> {
    private String[] values;
    @Override
    public void initialize(FlagValidator flagValidator) {
        this.values = flagValidator.value();
    }

    @Override
public boolean isValid(Integer value, 
ConstraintValidatorContext constraintValidatorContext) {
        boolean isValid = false;
        if(value==null){
            //当状态为空时使用默认值
            return true;
        }
        for(int i=0;i<values.length;i++){
            if(values[i].equals(String.valueOf(value))){
                isValid = true;
                break;
            }
        }
        return isValid;
    }
}

相关文章

  • API 安全机制 | 数据校验

    数据校验 接口层面; 数据库层面; 数据校验 | 接口层面 | 代码 数据校验 | 数据库层面 | 代码

  • Kettle 实战之 (3) 数据校验

    实例 增加节点-数据校验 1、从【校验】节点分类中选择【数据校验】 2、设置校验规则点击【增加校验】,增加校验规则...

  • 20170831-SpringMVC 数据校验

    说明:SpringMVC采用的数据校验——JSR 303 需要导入的包(Maven): 数据校验 一、 如何校验?...

  • 校验器

    数据通过校验器校验,如果校验不通过,拦截器抛出错误,校验器下面的代码就不能继续执行。 拓展:校验器负责数据校验,拦...

  • SpringMVC利用全局异常数据校验

    异常拦截-数据校验 SSM框架集成数据校验: 导入相关jar包 SSM集成所有jar包+以下jar包 数据校验工具...

  • 日志定位

    前后端 前端: 收集数据、数据校验、数据处理、数据解析、数据展现 后端: 数据解析、数据校验、数据处理 日志定位 ...

  • 2018-09-27/28日志定位+linux命令

    前后端 一、前端 手机数据 数据校验 数据处理 数据解析 数据展现 二、后端 数据解析 数据校验 数据处理 日志定...

  • 利用oracle审计,实现只允许指定的IP、应用、用户连接

    需要使用的数据表 数据库用户登录校验-用户 数据库用户登录校验-ip地址 数据库用户登录校验-终端 schema触发器

  • 项目中用到的策略模式

    所在项目:产品中心功能点:数据校验接口该接口用于校验产品中心的数据的正确性,根据数据类型校验,如果是数字类型的数据...

  • springMVC数据校验 Day32 2018-12-22

    springMVC数据校验 1. spring的validation校验 Spring校验框架在org.sprin...

网友评论

    本文标题:数据校验

    本文链接:https://www.haomeiwen.com/subject/qimutctx.html