在Hibernate Validator 4.1+中,@NotNull,@NotEmpty和@NotBlank之间有什么区别?
我似乎无法找到一个摘要来区分这三个注释之间的区别。
我似乎无法找到一个摘要来区分这三个注释之间的区别。
@NotNull
:字符序列、集合、映射或数组对象不为空,但可以为空。
:字符序列、集合、映射或数组对象不为空,大小> 0。
:字符串不为空,并且修剪后的长度大于零。@NotEmpty
@NotBlank
为了帮助您理解,让我们看看这些约束是如何定义和执行的(我使用的是4.1版):
约束定义为:@NotNull
@Constraint(validatedBy = {NotNullValidator.class})
此类具有定义为以下方法的方法:isValid
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
约束定义为:@NotEmpty
@NotNull
@Size(min = 1)
因此,此约束使用上述约束,其定义因对象而异,但应不言自明。@NotNull
@Size
最后,约束定义为:@NotBlank
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
因此,此约束也使用约束,但也使用 NotBlankValidator 类的约束。此类具有定义为以下方法的方法:@NotNull
isValid
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
有趣的是,如果字符串为 null,则此方法返回 true,但当且仅当修剪后的字符串的长度为 0 时,此方法才返回 false。如果为 null,则返回 true 是可以的,因为正如我所提到的,该定义还需要 .@NotEmpty
@NotNull
以下是一些示例:
字符串名称 = 空;
: 假
: 假
: 假@NotNull
@NotEmpty
@NotBlank
字符串名称 = “”;
: 真
: 假
: 假@NotNull
@NotEmpty
@NotBlank
字符串名称 = “ ”;
: 真
: 真
: 假@NotNull
@NotEmpty
@NotBlank
字符串名称 = “伟大的答案!”;
:真
:真
:真: 真@NotNull
@NotEmpty
@NotBlank
我喜欢下面链接中的解释:http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull:检查值是否不为 null,忽略内容
@NotEmpty:检查该值是否为空或为空。如果它只有空的空间,它将允许它为非空。
@NotBlank:检查值是否为空或为空,首先修剪该值。这意味着,它不允许只有空白空间。
因此,如果要验证某个字段是否不为 null,但要验证它是否只有空格,而是文本,则应使用@NotBlank。