zoukankan      html  css  js  c++  java
  • Spring 中@NotNull, @NotEmpty和@NotBlank之间的区别是什么?

    摘自:https://www.cnblogs.com/Terry-Wu/p/8134732.html


    示例:

    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:

    定义如下:
    @Constraint(validatedBy = {NotNullValidator.class})
    
    这个类中有一个isValid方法是这么定义的:
    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {  
     return object != null;    
    } 
    
    对象不是null就行,其他的不保证。

    2、@NotEmpty:

    定义如下:
    @NotNull    
    @Size(min = 1)    

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

      

    3、@NotBlank:

    @NotNull    
    @Constraint(validatedBy = {NotBlankValidator.class})   

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

    if ( charSequence == null ) {  //curious   
      return true;     
    }     
    return charSequence.toString().trim().length() > 0; 
    

      

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

      


     

      

  • 相关阅读:
    Python 学习笔记 11.模块(Module)
    Python 学习笔记 8.引用(Reference)
    Python 学习笔记 9.函数(Function)
    Python 学习笔记 6.List和Tuple
    Python 学习笔记 4.if 表达式
    Python 学习笔记 2.自省
    Python 学习笔记 3.简单类型
    Python 学习笔记 7.Dictionary
    Python 学习笔记 5.对象驻留
    Python 学习笔记 10.类(Class)
  • 原文地址:https://www.cnblogs.com/xinruyi/p/11257663.html
Copyright © 2011-2022 走看看