在Hibernate Validator 4.1+中,@ NotNull,@ NotEmpty和@NotBlank之间有什么区别?

时间:2013-06-16 20:18:23

标签: java hibernate validation bean-validation

我似乎无法找到区分这三个注释之间差异的摘要。

3 个答案:

答案 0 :(得分:287)

@NotNull:CharSequence,Collection,Map或Array对象不为空,但可以为空。
@NotEmpty:CharSequence,Collection,Map或Array对象不为null 和size> 0 即可。
@NotBlank:字符串不为空且修剪长度大于零

为了帮助您理解,我们来看看如何定义和执行这些约束(我使用的是4.1版):

  1. @NotNull约束定义为:

    @Constraint(validatedBy = {NotNullValidator.class})  
    

    此类的isValid方法定义为:

    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
     return object != null;  
    }
    
  2. @NotEmpty约束定义为:

    @NotNull  
    @Size(min = 1)    
    

    因此,此约束使用上面的@NotNull约束, @Size,其定义因对象而异,但应该是自我解释的。

  3. 最后,@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,因为正如我所提到的那样{{1} } definition也需要@NotEmpty

  4. 以下是一些例子:

    1. String name = null;
          @NotNull:false
          @NotNull:false
          @NotEmpty:false

    2. String name =“”;
          @NotBlank true
          @NotNull:false
          @NotEmpty:false

    3. String name =“”;
          @NotBlank true
          @NotNull true
          @NotEmpty:false

    4. String name =“很棒的答案!”;
          @NotBlank true
          @NotNull true
          @NotEmpty true

答案 1 :(得分:7)

我喜欢以下链接中的解释: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/

@NotNull:检查值是否为空,忽略内容

@NotEmpty:检查该值是否为空,也不为空。如果它只有空格,则允许它不为空。

@NotBlank:检查值是否为空还是空,首先修剪该值。这意味着,它不会只允许空格。

因此,如果你想验证一个字段不是null,而且它不只有空格而是文本,你应该使用@NotBlank。

答案 2 :(得分:0)

  1. @NotNull:受约束的CharSequence,Collection,Map或Array为 只要不为空就有效,但可以为空
  2. @NotEmpty:受约束的CharSequence,Collection,Map或Array 只要不为null并且大小/长度更大,就有效 大于零。
  3. @NotBlank:受约束的字符串只要不为空就有效 并且修剪后的长度大于零。