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 @NotNullvincolo è definito come:
@Constraint(validatedBy = {NotNullValidator.class})
Questa classe ha un isValidmetodo definito come:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}Il @NotEmptyvincolo è definito come:
@NotNull
@Size(min = 1)
Quindi questo vincolo usa il @NotNullvincolo di cui sopra e la @Size cui definizione differisce in base all'oggetto ma dovrebbe essere autoesplicativo.
Infine, il @NotBlankvincolo è definito come:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Quindi questo vincolo utilizza anche il @NotNullvincolo, ma vincola anche con la classe NotBlankValidator. Questa classe ha un isValidmetodo 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 @NotEmptydefinizione 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.