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 @NotNullrestrição é definida como:
@Constraint(validatedBy = {NotNullValidator.class})
Esta classe possui um isValidmétodo definido como:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}A @NotEmptyrestrição é definida como:
@NotNull
@Size(min = 1)
Portanto, essa restrição usa a @NotNullrestrição acima e @Size cuja definição difere com base no objeto, mas deve ser autoexplicativa.
Finalmente, a @NotBlankrestrição é definida como:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Portanto, essa restrição também usa a @NotNullrestrição, mas também restringe com a classe NotBlankValidator. Esta classe possui um isValidmé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
ConstraintValidatorassociado 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.