概述
JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。
Constraint的实现
Bean Validation constraints
Hibernate Validator 4.3.2 描述
“Bean验证约束”显示了Bean验证API中指定的所有约束的用途和支持的数据类型。所有这些约束都适用于字段/属性级别,Bean验证规范中没有定义类级别的约束。如果您使用的是Hibernate对象关系映射器,那么在为您的模型创建DDL时会考虑一些约束(请参阅“Hibernate元数据影响”专栏)
Hibernate Validator允许将一些约束应用于比Bean验证规范所要求的更多的数据类型(例如@Max可以应用于字符串)。依赖此功能可能会影响应用程序在Bean验证提供者之间的可移植性。
注解 | 支持的数据类型 | 描述信息 | 对元数据的影响 |
---|---|---|---|
@AssertFalse | Boolean, boolean | 检查带注释的元素是否为false | 无 |
@AssertTrue | Boolean, boolean | 检查带注释的元素是否为true | 无 |
@DecimalMax | BigDecimal, BigInteger, String, byte, short, int, long 和基本数据类型所对应的包装器. 另外由HV支持:Number和CharSequence的任何子类型 | 带注释的元素必须是一个数值,其值必须小于或等于指定的最大值。根据BigDecimal字符串表示法,参数值是最大值的字符串表示法 | 无 |
@DecimalMin | BigDecimal, BigInteger, String, byte, short, int, long 和基本数据类型所对应的包装器. 另外由HV支持:Number和CharSequence的任何子类型 | 带注释的元素必须是一个数值,其值必须大于或等于指定的最小值。根据BigDecimal字符串表示法,参数值是最小值的字符串表示法 | 无 |
@Digits(integer, fraction) | BigDecimal, BigInteger, String, byte, short, int, long 和基本数据类型所对应的包装器. 另外由HV支持:Number和CharSequence的任何子类型 | 检查注释的值是否为最多包含整数和小数位数的数字 | 定义字段精度和比例 |
@Future | java.util.Date、java.util.Calendar;由HV提供额外支持, 如果是Joda时间,[http://joda-time.sourceforge.net/]日期/时间API位于类路径上:ReadablePartial和ReadableInstant的任何实现 | 检查带注解的日期是否在将来 | 无 |
@Past | java.util.Date、java.util.Calendar;由HV提供额外支持, 如果是Joda时间,[http://joda-time.sourceforge.net/]日期/时间API位于类路径上:ReadablePartial和ReadableInstant的任何实现 | 检查带注解的日期是否在过去 | 无 |
@Max | BigDecimal、BigInteger、byte、short、int、long和基本数据类型所对应的包装器. 另外由HV支持:CharSequence的任何子类型(计算字符序列表示的数值)、Number的任何子类型 | 检查带注解的值是否小于或等于指定的最大值 | 在字段上添加检查约束 |
@Min | BigDecimal、BigInteger、byte、short、int、long和基本数据类型所对应的包装器. 另外由HV支持:CharSequence的任何子类型(计算字符序列表示的数值)、Number的任何子类型 | 检查带注解的值是否大于或等于指定的最小值 | 在字段上添加检查约束 |
@NotNull | 任何类型 | 检查带注解的值是否不为null | 字段不为null |
@Null | 任何类型 | 检查带注解的值是否为null | 无 |
@Pattern(regex, flag) | String, 另外由HV支持:CharSequence的任何子类型 | 检查带注解的字符串是否与正则表达式regex匹配(考虑给定的标志匹配) | 无 |
@Size(min, max) | String, Collection, Map 和数组,另外由HV支持:CharSequence的任何子类型 | 检查带注解元素的大小是否在最小值和最大值之间(包括最小值和最大值) | 字段的长度将会被设置为最大值 |
@Valid | 任何非基本类型 | 对关联对象递归执行验证,如果对象是集合或数组或是映射,则递归验证元素 | 无 |
Hibernate Validator 附加的
Hibernate Validator 4.3.2附加
除了Bean验证API定义的约束之外,Hibernate Validator还提供了一些有用的自定义约束。除了一个例外,这些约束也适用于字段/属性级别,只有@ScriptAssert是类级别的约束
注解 | 支持的数据类型 | 描述信息 | 对元数据的影响 |
---|---|---|---|
@CreditCardNumber | CharSequence | 检查带注释的字符序列是否通过Luhn校验和测试。注意,此验证旨在检查用户错误,而不是信用卡有效性!另见信用卡号码剖析[http://www.merriampark.com/anatomycc.htm] | 无 |
@Email | CharSequence | 检查指定的字符序列是否为有效的电子邮件地址。可选参数regexp和flags允许指定电子邮件必须匹配的其他正则表达式(包括正则表达式标志) | 无 |
@Length(min, max) | CharSequence | 验证带注解的字符序列是否在包含的最小值和最大值之间 | 字段的长度将设置为最大值 |
@ModCheck(modType, multiplier, startIndex, endIndex , checkDigitPosition, ignoreNonDigitCharacters) | CharSequence | 检查注释字符序列中的数字是否通过mod 10或mod 11校验和算法。modType 用于选择模类型,multiplier 决定特定于算法的乘法器(另请参见Luhn算法)[http://en.wikipedia.org/wiki/Luhn_algorithm]).startIndex 和endIndex 只允许在指定的子字符串上运行模算法。checkDigitPosition 允许使用字符序列中的任意数字作为检查数字。如果未指定,则假定校验位是指定范围的一部分。最后不能不提gnoreNonDigitCharacters 允许忽略非数字字符 | 无 |
@NotBlank | CharSequence | 检查带注解的字符序列是否不为null,且修剪长度是否大于0。与@NotEmpty 的区别在于,此约束只能应用于字符串,并且尾部空白被忽略 | 无 |
@NotEmpty | CharSequence, Collection, Map, 数组 | 检查带注释的元素是否为null或空 | 无 |
@Range(min, max) | BigDecimal, BigInteger, CharSequence, byte, short, int, long 和基本数据类型所对应的包装器 | 检查带注解的值是否介于(包括)指定的最小值和最大值之间 | 无 |
@SafeHtml(whitelistType,additionalTags) | CharSequence | 检查带注释解的值是否包含潜在的恶意片段,如<script/> 。为了使用此约束,jsoup[http://jsoup.org/]库必须是类路径的一部分。通过whitelistType 属性,可以选择重新定义的白名单类型。还可以使用additionalTags 属性为白名单指定其他html标记 | 无 |
@ScriptAssert(lang, script, alias) | 任何类型 | 检查给定脚本是否可以针对带注释的元素成功求值。为了使用此约束,JSR223(“Java平台脚本”)定义的Java脚本API的实现必须是类路径的一部分。要计算的表达式可以用任何脚本或表达式语言编写,在类路径中可以找到与JSR223兼容的引擎 | 无 |
@URL(protocol, host, port, regexp, flags) | CharSequence | 根据RFC2396检查带注释的字符序列是否为有效的URL。如果指定了protocol 、host 或port 的任何可选参数,则相应的URL片段必须与指定的值匹配。可选参数regexp 和flags 允许指定URL必须匹配的其他正则表达式(包括正则表达式标志) | 无 |
依赖
<!-- https://mvnrepository.com/artifact/javax.validation/validation-api -->
<!--接口规范-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<!--Hibernate Validator 附加实现-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.16.Final</version>
</dependency>
<!--注:在spring-boot-starter-web的2.1.5.RELEASE版本中包含了hibernate-validator的6.0.16版本-->
<!--springBoot项目集成-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
springBoot项目中使用
持续更新中…