案例:ZJJSpringBoot_2020/02/09 0:38:35_vg50j


参考:
https://www.iteye.com/blog/rensanning-2357373
https://blog.csdn.net/winxblast/article/details/83031646

(一)常用注解

需要注意的是,对象需要添加@Valid或@Validated 注解 ,这两个注解表名Spring对这个实体类进行校验,有了这个两个注解的其中一个,下面的注解才会生效,而校验的信息会存放到其后的 BindingResult 中

注意,必须相邻,如果有多个参数需要校验,形式可以如下。foo(@Validated Student student, BindingResult studentBindingResult ,@Validated Bar bar, BindingResult barBindingResult); 即一个校验类对应一个校验结果。


字符串
@NotBlank 只能作用于String上,不能为null,而且调用trim()之后,长度必须大于0


正则

@Pattern(regex=,flag=) 检查该字符串是否能够在match指定的情况下被regex定义的正则表达式匹配

其它



@AssertFalse 被标注的元素必须为false
@AssertTrue 被标注的元素必须为true

@DecimalMax @DecimalMin 限定被标注的属性的值的大小

@Digits(intege=,fraction=) 限定被标注的属性的整数位数和小数位数

@Future检验给定的日期是否比现在晚

@Past 校验给定的日期是否比现在早

@Max检查被标注的属性的值是否小于等于给定的值

@Min检查被标注的属性的值是否大于等于给定的值

@NotNull检验被标注的值不为空

@NotEmpty 不能为null,并且长度必须大于0


@Null 检验被标注的值为空


@Size(min=,max=) 检查被标注元素的长度

@Valid递归的对关联的对象进行校验

@Email 检查被标注的元素必须是邮箱

(二)嵌套校验,@Validated比@Valid的功能更强大,


@Validated比@Valid的功能更强大,主要体现在@Validated可以进行分组校验和嵌套校验。
如果同一个类,在不同的使用场景下有不同的校验规则,那么可以使用分组校验,用处不多,不再介绍。介绍一下嵌套校验
假如我们还要求学生填写父亲和母亲的名字(并且不能为空),而后端的设计中父亲和母亲的名字被放在另一个类Relation中,这就要求我们能进行嵌套校验。

我们要做如下2个事情
1.将方法中的@Valid注解改为@Validated
2.在relation属性上加@Valid注解

@Data
public class Student {

@NotBlank(message = “用户名不能为空”)
private String name;
@NotBlank(message = “手机号不能为空”)
@Pattern(regexp = “^1(3|4|5|7|8)\\d{9}$”, message = “手机号码格式错误”)
private String phone;
@NotBlank(message = “邮箱不能为空”)
@Email(message = “邮箱格式错误”)
private String email;
@NotNull(message = “父母名字不能为空”)
@Valid
private Relation relation;
}


@Data
public class Relation {

@NotBlank(message = “父亲的姓名不能为空”)
private String fatherName;
@NotBlank(message = “父亲的姓名不能为空”)
private String motherName;
}



分组校验

添加校验注解的方式固然很方便,但是如果Account 对象 在不同的业务中校验规则不同的话,难道我们需要编写两个Account 对象么?答案肯定不是,我们可以使用分组校验,对不同的校验规则进行隔离校验,互相不受影响。