Ich kann anscheinend keine Zusammenfassung finden, die den Unterschied zwischen diesen drei Anmerkungen unterscheidet.
Ich kann anscheinend keine Zusammenfassung finden, die den Unterschied zwischen diesen drei Anmerkungen unterscheidet.
Antworten:
@NotNull
: Das CharSequence-, Collection-, Map- oder Array-Objekt ist nicht null , kann jedoch leer sein.
@NotEmpty
: Das CharSequence-, Collection-, Map- oder Array-Objekt ist nicht null und hat eine Größe> 0 .
@NotBlank
: Die Zeichenfolge ist nicht null und die zugeschnittene Länge ist größer als null .
Schauen wir uns zum besseren Verständnis an, wie diese Einschränkungen definiert und ausgeführt werden (ich verwende Version 4.1):
Die @NotNull
Einschränkung ist definiert als:
@Constraint(validatedBy = {NotNullValidator.class})
Diese Klasse hat eine isValid
Methode definiert als:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
Die @NotEmpty
Einschränkung ist definiert als:
@NotNull
@Size(min = 1)
Also diese Einschränkung verwendet die @NotNull
Einschränkung oben, und @Size
deren Definition unterscheidet sich die Aufgabe zugrunde , sondern sollte selbsterklärend sein.
Schließlich ist die @NotBlank
Einschränkung definiert als:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Diese Einschränkung verwendet also auch die @NotNull
Einschränkung, aber auch Einschränkungen mit der NotBlankValidator-Klasse. Diese Klasse hat eine isValid
Methode definiert als:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Interessanterweise gibt diese Methode true zurück, wenn die Zeichenfolge null ist, aber nur dann false, wenn die Länge der zugeschnittenen Zeichenfolge 0 beträgt. Es ist in Ordnung, dass sie true zurückgibt, wenn sie null ist, da die @NotEmpty
Definition , wie bereits erwähnt, ebenfalls erforderlich ist @NotNull
.
Hier einige Beispiele:
String name = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: false
String name = "";
@NotNull
: true
@NotEmpty
: false
@NotBlank
: false
String name = "";
@NotNull
: true
@NotEmpty
: true
@NotBlank
: false
String name = "Großartige Antwort!";
@NotNull
: wahr
@NotEmpty
: wahr
@NotBlank
: wahr
ConstraintValidator
Mit diesen Anmerkungen scheint keine Verbindung mehr verbunden zu sein .
Die Erklärung im folgenden Link hat mir gefallen: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: Überprüft, ob der Wert nicht null ist, wobei der Inhalt nicht berücksichtigt wird
@NotEmpty: Überprüft, ob der Wert weder null noch leer ist. Wenn es nur leere Leerzeichen hat, wird es als nicht leer zugelassen.
@NotBlank: Überprüft, ob der Wert weder null noch leer ist, und schneidet zuerst den Wert ab. Dies bedeutet, dass nicht nur Leerzeichen zugelassen werden.
Wenn Sie also überprüfen möchten, dass ein Feld nicht null ist, sondern auch nicht nur Leerzeichen, sondern auch Text enthält, sollten Sie @NotBlank verwenden.
@NotNull:
Eine eingeschränkte CharSequence, Collection, Map oder Array ist gültig, solange sie nicht null ist, aber leer sein kann@NotEmpty:
Eine eingeschränkte CharSequence, Collection, Map oder Array ist gültig, solange sie nicht null ist und ihre Größe / Länge größer als null ist.@NotBlank:
Ein eingeschränkter String ist gültig, solange er nicht null ist und die zugeschnittene Länge größer als null ist.