Je n'arrive pas à trouver un résumé qui distingue la différence entre ces trois annotations.
@NotNull
: Les objets CharSequence, Collection, Map ou Array n'est pas null, mais peut être vide.@NotEmpty
: L'objet CharSequence, Collection, Map ou Array n'est pas null et taille>.@NotBlank
: La chaîne n'est pas nulle et la longueur ajustée est supérieure à zéro.
Pour vous aider à comprendre, examinons comment ces contraintes sont définies et appliquées (j'utilise la version 4.1):
Le @NotNull
contrainte est définie comme:
@Constraint(validatedBy = {NotNullValidator.class})
Cette classe a une méthode isValid
définie comme suit:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
Le @NotEmpty
contrainte est définie comme:
@NotNull
@Size(min = 1)
Donc cette contrainte utilise le @NotNull
contrainte ci-dessus, et@Size
dont la définition diffère en fonction de l'objet mais doit être explicite.
Finalement, le @NotBlank
contrainte est définie comme:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Donc, cette contrainte utilise aussi le @NotNull
contrainte, mais aussi contrainte avec la classe NotBlankValidator. Cette classe a une méthode isValid
définie comme suit:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Fait intéressant, cette méthode retourne true si la chaîne est null, mais false si et seulement si la longueur de la chaîne tronquée est 0. Il est normal qu'elle renvoie true si elle est null car, comme je l'ai mentionné, le @NotEmpty
La définition nécessite également @NotNull
.
Voici quelques exemples:
Nom de chaîne = null;@NotNull
: faux@NotEmpty
: faux@NotBlank
: faux
Nom de la chaîne = "";@NotNull
: vrai@NotEmpty
: faux@NotBlank
: faux
Nom de la chaîne = "";@NotNull
: vrai@NotEmpty
: vrai@NotBlank
: faux
String name = "Bonne 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 null, en ignorant le contenu
@NotEmpty: Vérifie si la valeur n'est ni nulle ni vide. S'il ne contient que des espaces vides, il sera autorisé à ne pas être vide.
@NotBlank: Vérifie si la valeur n'est ni nulle ni vide, coupant d'abord la valeur. Cela signifie que cela ne permettra pas que des espaces vides.
Donc, si vous voulez valider qu’un champ n’est pas nul, mais qu’il n’a pas que des espaces vides, mais du texte, vous devez utiliser @NotBlank.
@NotNull:
une séquence, une collection, une mappe ou un tableau contraint est valide tant qu’il n’est pas nul, mais peut être vide@NotEmpty:
une séquence, une collection, une carte ou un tableau sous contrainte est valide tant qu’il n’est pas nul et que sa taille/longueur est supérieure à zéro.@NotBlank:
une chaîne contrainte est valide tant qu'elle n'est pas nulle et que la longueur ajustée est supérieure à zéro.