Parece que no puedo encontrar un resumen que distinga la diferencia entre estas tres anotaciones.
Parece que no puedo encontrar un resumen que distinga la diferencia entre estas tres anotaciones.
Respuestas:
@NotNull
: El objeto CharSequence, Collection, Map o Array no es nulo , pero puede estar vacío.
@NotEmpty
: El objeto CharSequence, Collection, Map o Array no es nulo y tiene un tamaño> 0 .
@NotBlank
: La cadena no es nula y la longitud recortada es mayor que cero .
Para ayudarlo a comprender, veamos cómo se definen y ejecutan estas restricciones (estoy usando la versión 4.1):
La @NotNull
restricción se define como:
@Constraint(validatedBy = {NotNullValidator.class})
Esta clase tiene un isValid
método definido como:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
La @NotEmpty
restricción se define como:
@NotNull
@Size(min = 1)
Entonces, esta restricción usa la @NotNull
restricción anterior, y @Size
cuya definición difiere según el objeto, pero debe explicarse por sí misma.
Finalmente, la @NotBlank
restricción se define como:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Entonces, esta restricción también usa la @NotNull
restricción, pero también restringe con la clase NotBlankValidator. Esta clase tiene un isValid
método definido como:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Curiosamente, este método devuelve verdadero si la cadena es nula, pero falso si y solo si la longitud de la cadena recortada es 0. Está bien que devuelva verdadero si es nulo porque, como mencioné, la @NotEmpty
definición también requiere @NotNull
.
Aquí están algunos ejemplos:
Nombre de cadena = nulo;
@NotNull
: falso
@NotEmpty
: falso
@NotBlank
: falso
Nombre de cadena = "";
@NotNull
: verdadero
@NotEmpty
: falso
@NotBlank
: falso
Nombre de cadena = "";
@NotNull
: verdadero
@NotEmpty
: verdadero
@NotBlank
: falso
String name = "¡Gran respuesta!";
@NotNull
: verdadero
@NotEmpty
: verdadero
@NotBlank
: verdadero
ConstraintValidator
asociado con estas anotaciones por más tiempo .
Me gustó la explicación en el siguiente enlace: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: Comprueba si el valor no es nulo, sin tener en cuenta el contenido.
@NotEmpty: comprueba si el valor no es nulo ni está vacío. Si solo tiene espacios vacíos, lo permitirá como no vacío.
@NotBlank: comprueba si el valor no es nulo ni está vacío, recortando el valor primero. Significa que no permitirá solo espacios vacíos.
Entonces, si desea validar que un campo no es nulo pero también que no solo tiene espacios vacíos, sino texto, debe usar @NotBlank.
@NotNull:
una CharSequence, Collection, Map o Array restringida es válida siempre que no sea nula, pero puede estar vacía@NotEmpty:
una CharSequence, Collection, Map o Array restringida es válida siempre que no sea nula y su tamaño / longitud sea mayor que cero.@NotBlank:
una cadena restringida es válida siempre que no sea nula y la longitud recortada sea mayor que cero.