Ich kann nicht scheinen, eine Zusammenfassung zu finden, die den Unterschied zwischen diesen drei Anmerkungen unterscheidet.In Hibernate Validator 4.1 +, was ist der Unterschied zwischen @NotNull, @NotEmpty und @NotBlank?
Antwort
@NotNull
: Die CharSequence, Sammlung, Karte oder Array-Objekt ist nicht null, aber kann leer sein.
@NotEmpty
: Das Objekt CharSequence, Collection, Map oder Array ist nicht null und Größe> 0.
@NotBlank
: Die Zeichenfolge ist nicht null und die getrimmte Länge ist größer als Null.
Ihnen dabei helfen zu verstehen, wollen wir in aussehen wie diese Zwänge definiert und ausgeführt werden (Ich bin mit 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
über Einschränkung, und@Size
deren Definition unterscheidet sich die Aufgabe zugrunde, sondern sollte selbsterklärend sein.Schließlich ist die
@NotBlank
Einschränkung ist definiert als:@NotNull @Constraint(validatedBy = {NotBlankValidator.class})
Also diese Einschränkung auch verwendet die
@NotNull
Einschränkung, sondern auch mit der NotBlankValidator Klasse beschränkt. Diese Klasse hat eineisValid
Methode wie folgt definiert:if (charSequence == null) { //curious return true; } return charSequence.toString().trim().length() > 0;
Interessanterweise ist diese Methode gibt true zurück, wenn die Zeichenfolge null sind, aber falsch, wenn und nur dann, wenn die Länge der beschnittenen Saite ist 0. Es ist in Ordnung, dass es wahr zurück, wenn es ist null, weil, wie ich bereits erwähnte, die
@NotEmpty
Definition auch@NotNull
erfordert.
Hier sind ein paar Beispiele:
String name = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: falseString name = "";
@NotNull
: wahr
@NotEmpty
: false
@NotBlank
: falseString name = "„;
@NotNull
: wahr
@NotEmpty
: wahr
@NotBlank
: falseString name = "Great Antwort!";
@NotNull
: wahr
@NotEmpty
: wahr
@NotBlank
: wahr
mir die Erklärung in dem unten stehenden Link gefallen: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: überprüft, ob der Wert ist nicht null, abgesehen von dem Inhalt
@NotEmpty: Prüft, ob der Wert nicht null oder leer ist. Wenn es nur leere Leerzeichen hat, wird es als nicht leer zulassen.
@NotBlank: Prüft, ob der Wert nicht null oder leer ist, und kürzt den Wert zuerst ab. Es bedeutet, dass es nicht nur leere Räume erlaubt.
Also, wenn Sie validieren möchten, dass ein Feld nicht null ist, aber auch, dass es nicht nur leere Leerzeichen, sondern Text enthält, sollten Sie @NotBlank verwenden.
Ich verbrachte einige Zeit damit, diese Informationen selbst zu verfolgen, und ich wollte anderen helfen, von diesen Bemühungen zu profitieren. "Um ganz klar zu sein, ist es nicht nur OK, deine eigene Frage zu stellen und zu beantworten, sie wird ausdrücklich ermutigt." http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ –
Meiner Meinung nach sollte @NotBlank akzeptieren null. In einigen Fällen akzeptieren Sie null für optionale Felder, in denen das Leerzeichen nur ungültig ist. – tbraun
Dem würde ich zustimmen. Wenn Sie nicht null und nicht leer möchten, können Sie beide verwenden. Da dies nicht der Fall ist, könnten Sie Ihren eigenen Validator schreiben und diesen wie erwartet verwenden. –