Spring-boot系列(11):validator的使用

由于SpringBoot的Web组件内部集成了hibernate-validator,我们可以直接使用。

常用注解

这些注解使用在pojo上面,接收校验是会自动进行判断是否符合要求,进而提示对应的提示语,也可以使用message参数进行自己指定。

@AssertFalse
@AssertTrue //用于校验boolean为true或者false

@CreditCardNumber //信用卡号大致校验

@DecimalMax(value = “2”)
@DecimalMin(value = “2”) //只能大于或者小于该值

@Digits(integer = 2, fraction = 20) //检测是否为一种数字的 整数、分数、小数位的数字
@Email

@Future //检测时间是否为未来时间
@Past //检测时间是否过去

@Length(min = 0, max = 22) //字符串长度判断
@Max(value = 12)
@Min(value = 1) //最大数值、最小数字
@Size(min = 0, max = 12)//检测size是否在区间内,可以是字符串,list,map,数组

@NotNull //不能为空
@NotBlank //不能为空,自动去掉空格trim()
@NotEmpty //不能为空字符串
@Null

@URL

@Valid

代码使用

直接使用@Valid注解进行校验,使用参数BindingResult result来接收结果,MessageSource 对应国际化资源文件提示语,注入使用即可。

 @Autowired
    private MessageSource messageSource;

    @RequestMapping(value = "/validator")
    public String validator
            (
                    @Valid DemoEntity entity, BindingResult result
            ) {
        if (result.hasErrors()) {
            StringBuffer msg = new StringBuffer();
            //获取错误字段集合
            List<FieldError> fieldErrors = result.getFieldErrors();
            //获取本地locale,zh_CN
            Locale currentLocale = LocaleContextHolder.getLocale();
            //遍历错误字段获取错误消息
            for (FieldError fieldError :
                    fieldErrors) {
                //获取错误信息
                String errorMessage = messageSource.getMessage(fieldError, currentLocale);
                //添加到错误消息集合内
                msg.append(fieldError.getField() + ":" + errorMessage + " , ");
            }
            return msg.toString();
        }
        return "验证通过," + "名称:" + entity.getName() + "年龄:" + entity.getAge() + "邮箱地址:" + entity.getMail();
    }
}

自定义校验注解

有时可能要定义一些自己的注解来使用。

  • 1.创建注解
    其中@Constraint 表示提交该注解的校验由指定的类进行校验
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Constraint(validatedBy = FlagValidatorClass.class)
public @interface FlagValidator
{
    //flag的有效值多个使用','隔开
    String values();
    //提示内容
    String message() default "flag不存在";

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

    Class<? extends Payload>[] payload() default {};
}
  • FlagValidatorClass
public class FlagValidatorClass implements ConstraintValidator<FlagValidator, String> {

    //临时变量保存flag值列表
    private String values;

    //初始化
    public void initialize(FlagValidator constraint) {
        //将注解内配置的值赋值给临时变量
        this.values = constraint.values();
    }

    public boolean isValid(String obj, ConstraintValidatorContext context) {

        //分割定义的有效值
        String[] value_array = values.split(",");
        boolean isFlag = false;
        //遍历比对有效值
        for (int i = 0; i < value_array.length; i++) {
            //存在一致跳出循环,赋值isFlag=true
            if (value_array[i].equals(obj)) {
                isFlag = true;
                break;
            }
        }
        //返回是否存在boolean
        return isFlag;
    }
}



初始化的 值就是使用注解的参数值,isValid的obj参数就是外面请求进来需要校验的值。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值