目的
参数校验可以增强程序的健壮性。
实现方案
主要实现方法:
- 手动校验(缺点:麻烦)
- 使用注解校验(主流)
在Java中,注解校验有相关规范名为Bean Validation。
Hibernate Validator是Bean Validation的一个实现,它不仅实现了Bean Validation规范中的所有功能,还进行了一些扩展。
而Spring Validation 起到了一个让Hibernate Validator更好的集成到Spring中的作用。
Bean Validation
Bean Validation是一个规范。描述规范可以是语言,也可以是代码。
Bean Validation使用注解描述了数据校验的规范。
Bean Validation定义的注解
注解 | 描述 |
---|---|
@NotNull | 检查属性值不能为null |
@NotEmpty | 检查字符串、集合或数组等属性不能为空(即不是null且长度大于0) |
@NotBlank | 检查字符串属性不能仅包含空白字符(即不是null,且去除首尾空白后长度大于0),仅适用于String |
@Min(value) | 检查数值属性是否大于或等于指定的最小值 |
@Max(value) | 检查数值属性是否小于或等于指定的最大值 |
@Size(min=, max=) | 检查字符串、集合或数组等属性的大小是否在指定范围内 |
@Pattern(regexp=, flags=) | 检查字符串属性是否匹配指定的正则表达式 |
@DecimalMin(value) | 检查数值属性是否大于或等于指定的最小值(支持小数) |
@DecimalMax(value) | 检查数值属性是否小于或等于指定的最大值(支持小数) |
@Email(regexp=, flags=) | 检查字符串属性是否符合电子邮件的格式,也可以自定义正则表达式 |
@Future | 检查日期属性是否在当前日期之后 |
@Past | 检查日期属性是否在当前日期之前 |
@Digits(integer=, fraction=) | 检查数值的整数部分和小数部分是否满足指定的位数要求 |
Hibernate Validator 扩展的注解
注解 | 描述 |
---|---|
检查被注解的元素是否是一个有效的电子邮件地址 | |
@Length(min=, max=) | 检查字符串的长度是否在指定的最小值和最大值之间 |
@NotEmpty | 检查被注解的字符串、集合、Map或数组是否不为null且不为空(对于字符串,长度大于0;对于集合、Map或数组,包含至少一个元素) |
@NotBlank | 检查被注解的字符串是否不为null且去除首尾空格后长度大于0 |
@Range(min=, max=) | 检查数值是否在指定的最小值和最大值之间 |
@URL(protocol=, host=, port=, regexp=, flags=) | 检查被注解的字符串是否是一个有效的URL,并可根据需要指定协议、主机名、端口等条件 |
@CreditCardNumber | 检查被注解的字符串是否是一个有效的信用卡号,通常通过Luhn算法验证 |
@Valid与@Validated
@VALID | @vALIDETED | |
---|---|---|
所属 | 由Bean Validation 定义 | 由Spring Validation 定义 |
分组校验 | × | √ |
嵌套校验 | √ | × |