@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();
}