2013-06-16 5 views

Antwort

230

@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):

  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; 
    } 
    
  2. 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.

  3. 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 eine isValid 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:

  1. String name = null;
    @NotNull: false
    @NotEmpty: false
    @NotBlank: false

  2. String name = "";
    @NotNull: wahr
    @NotEmpty: false
    @NotBlank: false

  3. String name = "„;
    @NotNull: wahr
    @NotEmpty: wahr
    @NotBlank: false

  4. String name = "Great Antwort!";
    @NotNull: wahr
    @NotEmpty: wahr
    @NotBlank: wahr

+25

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/ –

+2

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

+1

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. –

1

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.

Verwandte Themen