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 @NotNull
contrainte est définie comme:
@Constraint(validatedBy = {NotNullValidator.class})
Cette classe a une isValid
méthode définie comme:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
La @NotEmpty
contrainte est définie comme:
@NotNull
@Size(min = 1)
Donc, cette contrainte utilise la @NotNull
contrainte ci-dessus, et @Size
dont la définition diffère en fonction de l'objet mais doit être explicite.
Enfin, la @NotBlank
contrainte est définie comme:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Donc, cette contrainte utilise également la @NotNull
contrainte, mais aussi des contraintes avec la classe NotBlankValidator. Cette classe a une isValid
mé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 @NotEmpty
dé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
ConstraintValidator
associé à 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.