在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。