Non riesco a trovare un riepilogo che distingua la differenza tra queste tre annotazioni.
Non riesco a trovare un riepilogo che distingua la differenza tra queste tre annotazioni.
Risposte:
@NotNull
: L'oggetto CharSequence, Collection, Map o Array non è nullo , ma può essere vuoto.
@NotEmpty
: L'oggetto CharSequence, Collection, Map o Array non è nullo e la dimensione è> 0 .
@NotBlank
: La stringa non è nulla e la lunghezza tagliata è maggiore di zero .
Per aiutarti a capire, esaminiamo come vengono definiti e applicati questi vincoli (sto usando la versione 4.1):
Il @NotNull
vincolo è definito come:
@Constraint(validatedBy = {NotNullValidator.class})
Questa classe ha un isValid
metodo definito come:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
Il @NotEmpty
vincolo è definito come:
@NotNull
@Size(min = 1)
Quindi questo vincolo usa il @NotNull
vincolo di cui sopra e la @Size
cui definizione differisce in base all'oggetto ma dovrebbe essere autoesplicativo.
Infine, il @NotBlank
vincolo è definito come:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Quindi questo vincolo utilizza anche il @NotNull
vincolo, ma vincola anche con la classe NotBlankValidator. Questa classe ha un isValid
metodo definito come:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
È interessante notare che questo metodo restituisce true se la stringa è nulla, ma false se e solo se la lunghezza della stringa tagliata è 0. Va bene che restituisca true se è null perché, come ho detto, anche la @NotEmpty
definizione richiede @NotNull
.
Ecco alcuni esempi:
Nome stringa = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: false
Nome stringa = "";
@NotNull
: vero
@NotEmpty
: falso
@NotBlank
: falso
Nome stringa = "";
@NotNull
: vero
@NotEmpty
: vero
@NotBlank
: falso
String name = "Ottima risposta!";
@NotNull
: vero
@NotEmpty
: vero
@NotBlank
: vero
Mi è piaciuta la spiegazione nel link sottostante: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: controlla se il valore non è nullo, ignorando il contenuto
@NotEmpty: controlla se il valore non è nullo né vuoto. Se ha solo spazi vuoti, lo consentirà come non vuoto.
@NotBlank: controlla se il valore non è nullo né vuoto, tagliando prima il valore. Significa che non consentirà solo spazi vuoti.
Quindi, se vuoi convalidare che un campo non è nullo ma anche che non ha solo spazi vuoti, ma testo, dovresti usare @NotBlank.
@NotNull:
una CharSequence, Collection, Map o Array vincolata è valida fintanto che non è nulla, ma può essere vuota@NotEmpty:
una CharSequence, Collection, Map o Array vincolata è valida fintanto che non è nulla e la sua dimensione / lunghezza è maggiore di zero.@NotBlank:
una stringa vincolata è valida fintanto che non è nulla e la lunghezza ridotta è maggiore di zero.