Je ne parviens pas à trouver un résumé qui distingue la différence entre ces trois annotations.
Réponses
Trop de publicités?@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) :
-
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; }
-
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. -
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 unisValid
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 :
-
String name = null ;
@NotNull
: faux@NotEmpty
: faux@NotBlank
: faux -
String name = "" ;
@NotNull
: vrai@NotEmpty
: faux@NotBlank
: faux -
String name = " " ;
@NotNull
: vrai@NotEmpty
: vrai@NotBlank
: faux -
String name = "Super réponse !";
@NotNull
: vrai@NotEmpty
: vrai@NotBlank
: vrai
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.
-
@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. -
@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. -
@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.