SpringBoot Validation参数校验 详解自定义注解规则<一>

261 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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个注解的区别:

  1. @NotNull - 不能为 null,但可以为 empty,一般用在Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制,BigDecimal字段只能用@NotNull校验。

  2. @NotEmpty - 不能为 null,且长度必须大于 0,一般用在 集合类上或者数组上,也可以用于字符串不为null

  3. @NotBlank - 只能作用在接收的 String 类型上,注意是只能不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符

三者都得不为null (没有参数传过来即为null )

@notNull 可以为空白或空格(长度不限) @NotEmpty 长度要大于0 (可以为空格,因为空格也有长度) @NotBlank 只能用在 string ,并且去掉空格之后要大于0

使用

实体类字段上添加校验注解

image.png

添加验证:

image.png

注意事项:

在使用 @NotBlank 等注解时,一定要和 @Validated 一起使用,否则 @NotBlank 不起作用。

message支持表达式和EL表达式 ,比如message = "姓名长度限制为{min}到{max} ${1+2}")。