持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
Hibernate Validator 是 Bean Validation 的参考实现 。Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint在日常开发中,Hibernate Validator经常用来验证bean的字段,基于注解,方便快捷高效。
在SpringBoot中可以使用@Validated,注解Hibernate Validator加强版,也可以使用@Valid原来Bean Validation java版本。
内置校验注解
Bean Validation 中内置的 constraint
| 注解 | 作用 |
|---|---|
| @Valid | 被注释的元素是一个对象,需要检查此对象的所有字段值 |
| @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(value) | 被注释的元素必须符合指定的正则表达式 |
Hibernate Validator 附加的 constraint| 注解作用
@Email 被注释的元素必须是电子邮箱地址
@Length(min=, max=) 被注释的字符串的大小必须在指定的范围内,一般用在 String 类型上可对字段数值进行最大长度限制的控制。
@NotEmpty 被注释的字符串的必须非空
@Range(min=, max=) 被注释的元素必须在合适的范围内,一般用在 Integer 类型上可对字段数值进行大小范围的控制。
@NotBlank 被注释的字符串的必须非空
@URL(protocol=,host=, port=, regexp=, flags=) 被注释的字符串必须是一个有效的url
@CreditCardNumber被注释的字符串必须通过Luhn校验算法,银行卡,信用卡等号码一般都用Luhn计算合法性
@ScriptAssert(lang=, script=, alias=) 要有Java Scripting API 即JSR 223("Scripting for the JavaTM Platform")的实现
@SafeHtml(whitelistType=,additionalTags=) classpath中要有jsoup包
常用三个判空字段差别
hibernate补充的注解中,主要区分下@NotNull @NotEmpty @NotBlank 3个注解的区别:
-
@NotNull -
不能为 null,但可以为 empty,一般用在Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制,BigDecimal字段只能用@NotNull校验。 -
@NotEmpty -
不能为 null,且长度必须大于 0,一般用在集合类上或者数组上,也可以用于字符串不为null。 -
@NotBlank -
只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符。
三者都得不为null (没有参数传过来即为null )
@notNull 可以为空白或空格(长度不限) @NotEmpty 长度要大于0 (可以为空格,因为空格也有长度) @NotBlank 只能用在 string ,并且去掉空格之后要大于0
使用
实体类字段上添加校验注解
添加验证:
注意事项:
在使用 @NotBlank 等注解时,一定要和 @Validated 一起使用,否则 @NotBlank 不起作用。
message支持表达式和EL表达式 ,比如message = "姓名长度限制为{min}到{max} ${1+2}")。