hibernate validator验证器

@Null被注释的元素必须为null

@NotNull被注释的元素必须不为null

@AssertTrue被注释的元素必须为true

@AssertFalse被注释的元素必须为false

@Min(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值

@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值@DecimalMax(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值@Size(max=, min=) 被注释的元素的大小必须在指定的范围内

@Digits(integer, fraction) 被注释的元素必须是一个数字,其值必须在可接受的范围内

@Past被注释的元素必须是一个过去的日期

@Future被注释的元素必须是一个将来的日期

@Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式

@NotBlank(message =) 验证字符串非null,且长度必须大于0

@Email被注释的元素必须是电子邮箱地址@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内

@NotEmpty被注释的字符串的必须非空

@Range(min=,max=,message=) 被注释的元素必须在合适的范围内

手动调用验证器完整的例子

public class ValidateTestClass{
 
    @NotNull(message = "reason信息不可以为空")
    @Pattern(regexp = "[1-7]{1}", message = "reason的类型值为1-7中的一个类型")
    private String reason;//订单取消原因
 
    //get、set方法、有参构造方法、无参构造方法、toString方法省略
 
    /**
     * 验证参数:就是验证上述注解的完整方法
     * @return
     */
    public void validateParams() {
        //调用JSR303验证工具,校验参数
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<ValidateTestClass>> violations = validator.validate(this);
        Iterator<ConstraintViolation<ValidateTestClass>> iter = violations.iterator();
        if (iter.hasNext()) {
            String errMessage = iter.next().getMessage();
            throw new ValidationException(errMessage);
        }
    }
}
public class ValidateTestClassValidateTest{
 
    @Test
    public void validateParam(){
        ValidateTestClass validateTestClass = new ValidateTestClass();
        validateTestClass .setReason(12);
 
        validateTestClass .validateParams(); //调用验证的方法
    }
}

springboot配置hibernate Validator返回模式:

1、普通模式(默认)false

普通模式(会校验完所有的属性,然后返回所有的验证失败信息)

2、快速失败返回模式 true

快速失败返回模式(只要有一个验证失败,则返回)

@Configuration
public class ValidatorConfig {
    @Bean
    public Validator validator(){
        ValidatorFactory validatorFactory = Validation.byProvider( HibernateValidator.class )
                .configure()
                .failFast( true/false )
                .buildValidatorFactory();
        Validator validator = validatorFactory.getValidator();

        return validator;
    }
}

自动调用验证器例子

@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class User extends BaseEntity {

    private static final long serialVersionUID = 1L;
    
    @NotBlank(message="用户名不能为空")
    private String username;

    @NotBlank(message="密码不能为空")
    private String password;

    @Email
    private String email;
    
    ...
    
}

controller中校验,@Valid表示需要验证的实体,BindingResult是校验结果

@PostMapping("/add")
public Result addUser(@Valid User user, BindingResult result) {
    if(result.hasErrors()) {
        List<ObjectError> allErrors = result.getAllErrors();
        for (ObjectError error : allErrors) {
            log.error("here is error ----------> {}", error.getDefaultMessage());
        }
        return Result.failure(allErrors.get(0).getDefaultMessage());
    }

    userService.save(user);
    return Result.success();
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值