问题

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


#1 热门回答(263 赞)

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

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

  • @NotNull约束定义为:@Constraint(validatedBy = )
     此类有一个isValid方法,定义如下:public boolean isValid(Object object,ConstraintValidatorContext constraintValidatorContext){
     return object!= null;
    }
  • @NotEmpty约束定义为:@NotNull
    @Size(min = 1)
     因此,此约束使用上面的@NotNull约束,@ Size的定义因对象而异,但应该是自解释的。
  • 最后,@ NotBlank约束定义为:@NotNull
    @Constraint(validatedBy =
    )
     因此,此约束也使用@NotNull约束,但也使用NotBlankValidator类进行约束。此类有一个isValid方法,定义为:if(charSequence == null){//好奇
      返回true;
    }
    return charSequence.toString()。trim()。length()> 0;
     有趣的是,如果字符串为null,则此方法返回true,但是当且仅当修剪字符串的长度为0时才返回false。如果它为null,则返回true,因为正如我所提到的,@ NotEmpty定义也需要@NotNull 。

这里有一些例子:

  • String name = null; @NotNull:false @NotEmpty:false @NotBlank:false
  • String name =""; @NotNull:true @NotEmpty:false @NotBlank:false
  • String name =""; @NotNull:true @NotEmpty:true @NotBlank:false
  • String name ="很棒的答案!"; @NotNull:true @NotEmpty:true @NotBlank:true

#2 热门回答(2 赞)

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

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

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

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

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


原文链接