Je n'arrive pas à trouver un résumé qui distingue la différence entre ces trois annotations.
Je n'arrive pas à trouver un résumé qui distingue la différence entre ces trois annotations.
Réponses:
@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 découpée est supérieure à zéro .
Pour vous aider à comprendre, regardons comment ces contraintes sont définies et exécutées (j'utilise la version 4.1):
La @NotNullcontrainte est définie comme:
@Constraint(validatedBy = {NotNullValidator.class})
Cette classe a une isValidméthode définie comme:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
La @NotEmptycontrainte est définie comme:
@NotNull
@Size(min = 1)
Donc, cette contrainte utilise la @NotNullcontrainte ci-dessus, et @Size dont la définition diffère en fonction de l'objet mais doit être explicite.
Enfin, la @NotBlankcontrainte est définie comme:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Donc, cette contrainte utilise également la @NotNullcontrainte, mais aussi des contraintes avec la classe NotBlankValidator. Cette classe a une isValidméthode définie comme:
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 nulle, mais false si et seulement si la longueur de la chaîne coupée est 0. Il est normal qu'elle retourne true si elle est nulle car, comme je l'ai mentionné, la @NotEmptydéfinition l'exige également @NotNull.
Voici quelques exemples:
Nom de la 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 = "Excellente réponse!";
@NotNull: vrai
@NotEmpty : vrai
@NotBlank : vrai
ConstraintValidatorassocié à ces annotations plus longtemps .
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 ni nulle ni vide. S'il ne contient que des espaces vides, il l'autorisera comme non vide.
@NotBlank: vérifie si la valeur n'est ni nulle ni vide, en 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 aussi qu'il ne contient pas que des espaces vides, mais du texte, vous devez utiliser @NotBlank.
@NotNull: un CharSequence, Collection, Map ou Array contraint est valide tant qu'il n'est pas nul, mais il peut être vide@NotEmpty: une CharSequence, Collection, Map ou Array contrainte est valide tant qu'elle n'est pas nulle 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 tronquée est supérieure à zéro.