Ric*_* II 109 java validation hibernate bean-validation
我似乎无法找到区分这三个注释之间差异的摘要.
Ric*_* II 304
@NotNull:CharSequence,Collection,Map或Array对象不为null,但可以为空.
@NotEmpty:CharSequence,Collection,Map或Array对象不为null 且大小> 0.
@NotBlank:字符串不为null ,修剪长度大于零.
为了帮助您理解,让我们看看如何定义和执行这些约束(我使用的是4.1版):
该@NotNull约束被定义为:
@Constraint(validatedBy = {NotNullValidator.class})
Run Code Online (Sandbox Code Playgroud)
该类有一个isValid定义为的方法:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
Run Code Online (Sandbox Code Playgroud)该@NotEmpty约束被定义为:
@NotNull
@Size(min = 1)
Run Code Online (Sandbox Code Playgroud)
所以这个约束使用@NotNull上面的约束,并且 @Size其定义根据对象而不同,但应该是自我解释的.
最后,@NotBlank约束定义为:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Run Code Online (Sandbox Code Playgroud)
因此,此约束也使用@NotNull约束,但也使用NotBlankValidator类进行约束.该类有一个isValid定义为的方法:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果字符串为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
小智 7
我喜欢以下链接中的解释:http: //www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull:检查值是否为空,忽略内容
@NotEmpty:检查值是否为空,也不为空.如果它只有空格,它将允许它不为空.
@NotBlank:检查值是否为空还是空,首先修剪该值.这意味着,它不会只允许空格.
因此,如果您要验证某个字段不是null,而且它不是只有空格而是文本,那么您应该使用@NotBlank.
@NotNull:受约束的 CharSequence、Collection、Map 或 Array 只要\xe2\x80\x99s 不为 null,\n就有效,但它可以为空@NotEmpty:受约束的 CharSequence、Collection、Map 或 Array 只要\xe2\x80\x99 不为 null 并且其大小/长度大于零,\n 就有效。@NotBlank:只要受约束的字符串\xe2\x80\x99 不为空\n并且修剪后的长度大于零,它就是有效的。| 归档时间: |
|
| 查看次数: |
54392 次 |
| 最近记录: |