Nie mogę znaleźć podsumowania, które odróżniałoby różnicę między tymi trzema adnotacjami.
Nie mogę znaleźć podsumowania, które odróżniałoby różnicę między tymi trzema adnotacjami.
Odpowiedzi:
@NotNull: Obiekt CharSequence, Collection, Map lub Array nie ma wartości NULL , ale może być pusty.
@NotEmpty: Obiekt CharSequence, Collection, Map lub Array nie ma wartości NULL i ma rozmiar> 0 .
@NotBlank: Ciąg nie jest pusty, a przycięta długość jest większa od zera .
Aby pomóc Ci zrozumieć, przyjrzyjmy się, jak te ograniczenia są definiowane i wykonywane (używam wersji 4.1):
@NotNullOgraniczeniem jest zdefiniowany jako:
@Constraint(validatedBy = {NotNullValidator.class})
Ta klasa ma isValidmetodę zdefiniowaną jako:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
@NotEmptyOgraniczeniem jest zdefiniowany jako:
@NotNull
@Size(min = 1)
Więc to ograniczenie stosuje się @NotNullograniczenie powyżej, a @Size którego definicja różni się w zależności od obiektu, ale powinna być jasna explanitory.
Ostatecznie @NotBlankograniczenie definiuje się jako:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Więc to ograniczenie również używa @NotNullograniczenia, ale także ogranicza się z klasą NotBlankValidator. Ta klasa ma isValidmetodę zdefiniowaną jako:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Co ciekawe, ta metoda zwraca prawdę, jeśli ciąg jest pusty, ale fałsz wtedy i tylko wtedy, gdy długość przyciętego ciągu wynosi 0. W porządku, że zwraca wartość true, jeśli jest pusty, ponieważ, jak wspomniałem, @NotEmptydefinicja również wymaga @NotNull.
Oto kilka przykładów:
Nazwa ciągu = null;
@NotNull: false
@NotEmpty: false
@NotBlank: false
Nazwa ciągu = "";
@NotNull: prawda
@NotEmpty : fałsz
@NotBlank: fałsz
Nazwa ciągu = "";
@NotNull: prawda
@NotEmpty : prawda
@NotBlank : fałsz
Nazwa ciągu = "Świetna odpowiedź!";
@NotNull: prawda
@NotEmpty : prawda
@NotBlank : prawda
ConstraintValidatoradnotacje nie są już powiązane .
Podobało mi się wyjaśnienie w poniższym linku: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: sprawdza, czy wartość nie jest null, ignorując zawartość
@NotEmpty: sprawdza, czy wartość nie jest zerowa ani pusta. Jeśli ma tylko puste spacje, pozwoli to jako niepuste.
@NotBlank: sprawdza, czy wartość nie jest zerowa ani pusta, najpierw przycinając wartość. Oznacza to, że nie pozwoli tylko na puste przestrzenie.
Tak więc, jeśli chcesz sprawdzić, czy pole nie jest puste, ale także że zawiera nie tylko puste spacje, ale tekst, powinieneś użyć @NotBlank.
@NotNull: ograniczona CharSequence, Collection, Map lub Array jest ważna, o ile nie ma wartości null, ale może być pusta@NotEmpty: ograniczona CharSequence, Collection, Map lub Array jest prawidłowa, o ile nie ma wartości null, a jej rozmiar / długość jest większa niż zero.@NotBlank: ograniczony String jest ważny, o ile nie jest null, a przycięta długość jest większa od zera.