您当前的位置: 首页 >  Java
  • 3浏览

    0关注

    284博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【JAVA | Spring】Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

区块链(Web3)开发工程师 发布时间:2019-12-23 18:02:27 ,浏览量:3

示例:

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 = "Great answer!";
@NotNull: true
@NotEmpty: true
@NotBlank: true

简述三者区别

@NotNull://CharSequence, Collection, Map 和 Array 对象不能是 null, 但可以是空集(size = 0)。 
@NotEmpty://CharSequence, Collection, Map 和 Array 对象不能是 null 并且相关对象的 size 大于 0。 
@NotBlank://String 不能是 null 且去除两端空白字符后的长度(trimmed length)大于 0。

  

注解的定义(在version 4.1中):

1、@NotNull:

定义如下:

1

@Constraint(validatedBy = {NotNullValidator.class})

这个类中有一个isValid方法是这么定义的:

1

2

3

public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) { 

 return object != null;   

}

对象不是null就行,其他的不保证。

 

2、@NotEmpty:

定义如下:

1

2

@NotNull   

@Size(min = 1)    

也就是说,@NotEmpty除了@NotNull之外还需要保证@Size(min=1),这也是一个注解,这里规定最小长度等于1,也就是类似于集合非空。

  

3、@NotBlank:

1

2

@NotNull   

@Constraint(validatedBy = {NotBlankValidator.class})   

类似地,除了@NotNull之外,还有一个类的限定,这个类也有isValid方法:

1

2

3

4

if ( charSequence == null ) {  //curious  

  return true;    

}    

return charSequence.toString().trim().length() > 0;

  

1

有意思的是,当一个string对象是null时方法返回true,但是当且仅当它的trimmed length等于零时返回false。即使当string是null时该方法返回true,但是由于@NotBlank还包含了@NotNull,所以@NotBlank要求string不为null

  

关注
打赏
1665194163
查看更多评论
立即登录/注册

微信扫码登录

0.0367s