it-swarm.com.de

Was ist der Unterschied zwischen @NotNull, @NotEmpty und @NotBlank in Hibernate Validator 4.1+?

Es scheint mir nicht möglich zu sein, eine Zusammenfassung zu finden, die den Unterschied zwischen diesen drei Anmerkungen unterscheidet.

107
Rick Hanlon II

@NotNull: Das CharSequence-, Collection-, Map- oder Array-Objekt ist nicht null, aber kann leer sein.
@NotEmpty: Das CharSequence-, Collection-, Map- oder Array-Objekt ist nicht null nd Größe>.
@NotBlank: Die Zeichenfolge ist nicht null nd die abgeschnittene Länge ist größer als null.

Sehen wir uns zum besseren Verständnis an, wie diese Einschränkungen definiert und ausgeführt werden (ich verwende Version 4.1):

  1. Das @NotNull Einschränkung ist definiert als:

    @Constraint(validatedBy = {NotNullValidator.class})  
    

    Diese Klasse hat eine isValid -Methode, die wie folgt definiert ist:

    public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
     return object != null;  
    }
    
  2. Das @NotEmpty Einschränkung ist definiert als:

    @NotNull  
    @Size(min = 1)    
    

    Diese Einschränkung verwendet das @NotNull Einschränkung oben, nd@Size, dessen Definition sich je nach Objekt unterscheidet, aber selbsterklärend sein sollte.

  3. Endlich, das @NotBlank Einschränkung ist definiert als:

    @NotNull  
    @Constraint(validatedBy = {NotBlankValidator.class})        
    

    Also diese Einschränkung verwendet auch die @NotNull Einschränkung, aber auch Einschränkungen mit der NotBlankValidator-Klasse. Diese Klasse hat eine isValid -Methode, die wie folgt definiert ist:

    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 false, wenn und nur wenn die Länge der abgeschnittenen Zeichenfolge 0 ist. Es ist in Ordnung, dass sie true zurückgibt, wenn sie null ist, da, wie bereits erwähnt, das @NotEmpty Definition erfordert auch @NotNull.

Hier einige Beispiele:

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

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

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

  4. String name = "Tolle Antwort!";
    @NotNull: true
    @NotEmpty: true
    @NotBlank: true

297
Rick Hanlon II

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, ohne Rücksicht auf den Inhalt

@NotEmpty: Überprüft, ob der Wert weder null noch leer ist. Wenn es nur leere Räume hat, wird es als nicht leer zugelassen.

@NotBlank: Überprüft, ob der Wert weder null noch leer ist, und schneidet den Wert zuerst ab. Dies bedeutet, dass nicht nur Leerzeichen zulässig sind.

Wenn Sie also überprüfen möchten, dass ein Feld nicht null ist, sondern nicht nur Leerzeichen, sondern Text enthält, sollten Sie @NotBlank verwenden.

7
Pratiksha
  1. @NotNull: Eine eingeschränkte CharSequence, Collection, Map oder Array ist gültig, solange sie nicht null ist, aber leer sein kann
  2. @NotEmpty: Eine eingeschränkte Zeichenfolge, Sammlung, Zuordnung oder Anordnung ist gültig, solange sie nicht null ist und ihre Größe/Länge größer als null ist.
  3. @NotBlank: Eine eingeschränkte Zeichenfolge ist gültig, solange sie nicht null ist und die zugeschnittene Länge größer als null ist.
1