播放地址 2.3 内建约束(Built-in constraints)

Hibernate验证器包括常用约束的基本集合。这些首先是由Bean验证规范定义的约束(参见2.3.1节,“Bean验证约束”)。此外,Hibernate Validator提供有用的自定义约束(参见2.3.2节,“附加约束”)。

2.3.1. Bean Validation constraints

下面您可以找到bean验证API中指定的所有约束的列表。所有这些约束都应用于字段/属性级别,在Bean验证规范中没有定义类级别的约束。如果您正在使用Hibernate对象-关系映射器,在为模型创建DDL时将考虑一些约束(参见“Hibernate元数据影响”)。

NOTE :Hibernate Validator允许将一些约束应用于比Bean Validation规范要求的更多的数据类型(例如,@Max可以应用于字符串)。依赖该特性会影响应用程序在Bean验证提供者之间的可移植性。

注解
说明
应用数据范围
Hibernate metadata impact
@AssertFalse
Checks false
Boolean, boolean
None
@AssertTrue
Checks true
Boolean, boolean
None
@DecimalMax(value=, inclusive=)
检查包含值是否小于指定的最大值,当inclusive=false时。否则,该值是否小于或等于指定的最大值。参数值是根据BigDecimal字符串表示的最大值的字符串表示。
数字
None
@DecimalMin(value=, inclusive=)
同上
none
@Digits(integer=, fraction=)
检查带注释的值是否为最多具有整数位数和分数位数的数字。
数字
Defines column precision and scale
@Email
检查指定的字符序列是否是有效的电子邮件地址。可选参数regexp和标志允许指定电子邮件必须匹配的附加正则表达式(包括正则表达式标志)
CharSequence
None
@Future
检查注解日期是否在将来
None
@FutureOrPresent
检查注释日期是否在现在或将来(有点闷逼)
时间
None
@Max(value=)
检查注释的值是否小于或等于指定的最大值。·
数字
Adds a check constraint on the column
@Min(value=)
同上
@NotBlank
检查注释的字符序列不是空的,修剪长度大于0。与@NotEmpty的不同之处在于,这个约束只能应用于字符序列,并且尾随的空白区域被忽略。
CharSequence
None
@NotEmpty
Checks whether the annotated element is not null nor empty
CharSequence, Collection, Map and arrays
None
@NotNull
不为空
任何类型
Column(s) are not nullable
@Negative
检查元素是否严格为负。零值被认为是无效的。
数字
None
@NegativeOrZero
包含0
数字
None
@Null
Checks that the annotated value is null
任何类型
None
@Past
过去的时间
时间
None
@PastOrPresent
过去或者现在
时间
None
@Pattern(regex=, flags=)
考虑给定标志匹配,检查注释的字符串是否与正则表达式正则表达式匹配
字符串
None
@Positive
检查元素是否严格为正。零值被认为是无效的。
数字
None
@PositiveOrZero
@Size(min=, max=)
检查注释元素的大小是否在最小和最大之间(包含)。
CharSequence, Collection, Map and arrays
Column length will be set to max

NOTE : 在上面列出的参数之上,每个约束都有参数消息、组和有效负载。这是bean验证规范的要求。(On top of the parameters listed above each constraint has the parameters message, groups and payload. This is a requirement of the Bean Validation specification.)

2.3.2. Additional constraints(格外添加的)

除了Bean Validation API定义的约束之外,Hibernate Validator还提供以下列出的一些有用的自定义约束。除了一个例外,这些约束也适用于字段/属性级别,只有@ScriptAssert是类级别的约束。

注解 含义 作用范围 Hibernate metadata impact
@CreditCardNumber(ignoreNonDigitCharacters=) 检查注释的字符序列是否通过LuHn校验和测试。注意,此验证旨在检查用户错误,而不是信用卡有效性!请参阅信用卡号码的剖析。忽略数字字符允许忽略非数字字符。默认值为false。 字符串 None
@EAN 检查注释的字符序列是否是有效的EAN条形码。类型决定条形码的类型。默认为EAN-13。 字符串 None
@ISBN 检查注释的字符序列是否是有效的ISBN。类型决定ISBN的类型。默认为ISBN-13 字符串 None
@Length(min=, max=) 验证注释的字符序列在最小和最大包含之间。 字符串 Column length will be set to max
@Range(min=, max=) 检查注释值是否位于(包含)指定最小值和最大值之间。 数字 None

@ScriptAssert(lang=, script=, alias=, reportOn=)
| 检查给定脚本是否可以成功地与注释元素进行评估。为了使用这个约束,Java JScript 223定义的Java脚本API的实现(“JavaTM平台的脚本”)必须是类路径的一部分。要评估的表达式可以用任何脚本或表达式语言编写,在类路径中可以找到JSR 223兼容的引擎。即使这是一个类级别的约束,也可以使用reportOn属性来报告特定属性上的约束违反,而不是整个对象。 | 任何(无限可能) | None |
| @UniqueElements | 检查注释的集合只包含唯一的元素。使用equals()方法来确定相等性。默认消息不包括重复元素列表,但是可以通过重写消息并使用{duplicates}消息参数来包括它。重复元素的列表也包含在约束违反的动态有效载荷中。 | Collection | None |