Answers:
@NotNull
:CharSequence,Collection,Map或Array对象不为null,但可以为空。
@NotEmpty
:CharSequence,Collection,Map或Array对象不为null,并且size> 0。
@NotBlank
:字符串不为null ,并且修剪后的长度大于零。
为了帮助您理解,让我们研究一下如何定义和执行这些约束(我使用的是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})
因此,此约束还使用了@NotNull
约束,但也约束了NotBlankValidator类。此类的isValid
方法定义为:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
有趣的是,如果字符串为null,则此方法返回true,但仅当修剪后的字符串的长度为0时,此方法才返回false。如果为null,则返回true是可以的,因为正如我提到的,@NotEmpty
定义也需要@NotNull
。
这里有一些例子:
字符串名称= null;
@NotNull
:错误
@NotEmpty
:错误
@NotBlank
:错误
字符串名称=“”;
@NotNull
:真
@NotEmpty
:假
@NotBlank
:假
字符串名称=“”;
@NotNull
:true
@NotEmpty
:true
@NotBlank
:false
字符串名称=“好答案!”;
@NotNull
:true
@NotEmpty
:true
@NotBlank
:true
我喜欢以下链接中的解释:http : //www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull:不考虑内容而检查值是否不为null
@NotEmpty:检查该值是否不为null也不为空。如果只有空格,它将允许它不为空。
@NotBlank:检查该值是否不为null也不为空,首先修剪该值。这意味着,它不会只允许有空格。
因此,如果要验证字段不是空值,而且还不只是空白,而是文本,则应使用@NotBlank。
@NotNull:
受约束的CharSequence,Collection,Map或Array有效,只要它不为null,但可以为空@NotEmpty:
受约束的CharSequence,Collection,Map或Array有效,只要它不为null且其大小/长度大于零即可。@NotBlank:
受约束的字符串有效,只要它不为null且修剪后的长度大于零即可。