在Hibernate Validator 4.1+中,@NotNull,@NotEmpty和@NotBlank有什么区别?
我似乎无法find一个区分这三个注释区别的总结。
@NotNull
:CharSequence,Collection,Map或Array对象不为null ,但可以为空。
@NotEmpty
:CharSequence,Collection,Map或Array对象不为null ,大小> 0 。
@NotBlank
:string不为空,并且修剪的长度大于零 。
为了帮助您理解,我们来看看如何定义和执行这些约束条件(我正在使用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;
有趣的是,如果string为空,则此方法返回true,但当且仅当修剪的string的长度为0时返回true。如果为空,则返回true,因为如我所提到的,
@NotEmpty
定义也要求@NotNull
。
这里有一些例子:
-
String name = null;
@NotNull
:false
@NotEmpty
:false
@NotBlank
:false -
String name =“”;
@NotNull
: 真的
@NotEmpty
:false
@NotBlank
:false -
String name =“”;
@NotNull
: 真的
@NotEmpty
: true
@NotBlank
:false -
string名称=“好的答案!”;
@NotNull
: 真的
@NotEmpty
: true
@NotBlank
: 真的
我喜欢在下面的链接的解释: http : //www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull:检查值是否不为空,忽略内容
@NotEmpty:检查值是否为空也不为空。 如果它只有空的空间,它将允许它不是空的。
@NotBlank:检查值是否不为空也不为空,首先修改值。 这意味着,它不会允许只是空的空间。
所以,如果你想validation一个字段不为空,而且它不只是空白,而是文本,你应该使用@NotBlank。