Não consigo encontrar um resumo que distinga a diferença entre essas três anotações.
Não consigo encontrar um resumo que distinga a diferença entre essas três anotações.
Respostas:
@NotNull
: O objeto CharSequence, Collection, Map ou Array não é nulo , mas pode estar vazio.
@NotEmpty
: O objeto CharSequence, Collection, Map ou Array não é nulo e tem tamanho> 0 .
@NotBlank
: A string não é nula e o comprimento aparado é maior que zero .
Para ajudá-lo a entender, vamos ver como essas restrições são definidas e realizadas (estou usando a versão 4.1):
A @NotNull
restrição é definida como:
@Constraint(validatedBy = {NotNullValidator.class})
Esta classe possui um isValid
método definido como:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
A @NotEmpty
restrição é definida como:
@NotNull
@Size(min = 1)
Portanto, essa restrição usa a @NotNull
restrição acima e @Size
cuja definição difere com base no objeto, mas deve ser autoexplicativa.
Finalmente, a @NotBlank
restrição é definida como:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Portanto, essa restrição também usa a @NotNull
restrição, mas também restringe com a classe NotBlankValidator. Esta classe possui um isValid
método definido como:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Curiosamente, este método retorna verdadeiro se a string for nula, mas falso se e somente se o comprimento da string aparada for 0. Está tudo bem que ele retorne verdadeiro se for nulo porque, como mencionei, o @NotEmpty
definição também exige @NotNull
.
Aqui estão alguns exemplos:
String name = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: false
Nome da string = "";
@NotNull
: verdadeiro
@NotEmpty
: falso
@NotBlank
: falso
Nome da string = "";
@NotNull
: true
@NotEmpty
: true
@NotBlank
: falso
String name = "Ótima resposta!";
@NotNull
: verdadeiro
@NotEmpty
: verdadeiro
@NotBlank
: verdadeiro
ConstraintValidator
associado a estas anotações por mais tempo .
Gostei da explicação no link abaixo: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: verifica se o valor não é nulo, desconsiderando o conteúdo
@NotEmpty: verifica se o valor não é nulo nem vazio. Se tiver apenas espaços vazios, permitirá que não esteja vazio.
@NotBlank: verifica se o valor não é nulo nem vazio, cortando o valor primeiro. Isso significa que não permitirá apenas espaços vazios.
Portanto, se você deseja validar que um campo não é nulo, mas também que não contém apenas espaços vazios, mas texto, você deve usar @NotBlank.
@NotNull:
um CharSequence, Collection, Map ou Array restrito é válido desde que não seja nulo, mas pode estar vazio@NotEmpty:
um CharSequence, Collection, Map ou Array restrito é válido desde que não seja nulo e seu tamanho / comprimento seja maior que zero.@NotBlank:
uma String restrita é válida desde que não seja nula e o comprimento aparado seja maior que zero.