127 votes

Dans le validateur Hibernate 4.1+, quelle est la différence entre @NotNull, @NotEmpty et @NotBlank ?

Je ne parviens pas à trouver un résumé qui distingue la différence entre ces trois annotations.

347voto

Rick Hanlon II Points 2034

@NotNull : L'objet CharSequence, Collection, Map ou Array. n'est pas nul mais peut être vide.
@NotEmpty : L'objet CharSequence, Collection, Map ou Array n'est pas nul. et taille > 0 .
@NotBlank : La chaîne n'est pas nulle et la longueur rognée est supérieure à zéro .

Pour vous aider à comprendre, voyons comment ces contraintes sont définies et exécutées (j'utilise la version 4.1) :

  1. El @NotNull est définie comme suit :

    @Constraint(validatedBy = {NotNullValidator.class})  

    Cette classe a un isValid méthode définie comme suit :

    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
     return object != null;  
    }
  2. El @NotEmpty est définie comme suit :

    @NotNull  
    @Size(min = 1)    

    Donc cette contrainte utilise el @NotNull contrainte ci-dessus, et @Size dont la définition diffère selon l'objet, mais qui devrait être explicite.

  3. Enfin, le @NotBlank est définie comme suit :

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

    Cette contrainte utilise donc également le @NotNull mais aussi des contraintes avec la classe NotBlankValidator. Cette classe possède un isValid méthode définie comme suit :

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

    Il est intéressant de noter que cette méthode renvoie un résultat vrai si la chaîne de caractères est nulle, mais faux si et seulement si la longueur de la chaîne de caractères coupée est égale à zéro. @NotEmpty La définition exige également @NotNull .

Voici quelques exemples :

  1. String name = null ;
    @NotNull : faux
    @NotEmpty : faux
    @NotBlank : faux

  2. String name = "" ;
    @NotNull : vrai
    @NotEmpty : faux
    @NotBlank : faux

  3. String name = " " ;
    @NotNull : vrai
    @NotEmpty : vrai
    @NotBlank : faux

  4. String name = "Super réponse !";
    @NotNull : vrai
    @NotEmpty : vrai
    @NotBlank : vrai

8voto

Pratiksha Points 81

J'ai aimé l'explication dans le lien ci-dessous : http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/

@NotNull : Vérifie si la valeur n'est pas nulle, sans tenir compte du contenu.

@NotEmpty : Vérifie si la valeur n'est pas nulle ou vide. Si elle ne comporte que des espaces vides, elle sera considérée comme non vide.

@NotBlank : Vérifie si la valeur n'est pas nulle ou vide, en coupant d'abord la valeur. Cela signifie que les espaces vides ne sont pas autorisés.

Ainsi, si vous voulez valider qu'un champ n'est pas nul mais aussi qu'il ne contient pas seulement des espaces vides, mais du texte, vous devez utiliser @NotBlank.

4voto

  1. @NotNull: une séquence de caractères, une collection, une carte ou un tableau contraint est valide tant qu'elle n'est pas nulle, mais elle peut être vide.
  2. @NotEmpty: une séquence de caractères, une collection, une carte ou un tableau contraint. est valide tant qu'elle n'est pas nulle et que sa taille/longueur est supérieure à zéro. supérieure à zéro.
  3. @NotBlank: une chaîne contrainte est valide tant qu'elle n'est pas nulle. et que la longueur découpée est supérieure à zéro.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X