Кажется, я не могу найти краткое изложение, которое бы различало разницу между этими тремя аннотациями.
Кажется, я не могу найти краткое изложение, которое бы различало разницу между этими тремя аннотациями.
Ответы:
@NotNull
: Объект CharSequence, Collection, Map или Array не равен нулю , но может быть пустым.
@NotEmpty
: Объект CharSequence, Collection, Map или Array не равен нулю и имеет размер> 0 .
@NotBlank
: Строка не пуста, а обрезанная длина больше нуля .
Чтобы помочь вам понять, давайте посмотрим, как эти ограничения определяются и выполняются (я использую версию 4.1):
@NotNull
Ограничение определяется как:
@Constraint(validatedBy = {NotNullValidator.class})
Этот класс имеет isValid
метод, определенный как:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
@NotEmpty
Ограничение определяется как:
@NotNull
@Size(min = 1)
Таким образом , это ограничение использует на @NotNull
ограничение выше, и @Size
определение которого отличается на основе объекта , но должно быть само explanitory.
Наконец, @NotBlank
ограничение определяется как:
@NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
Таким образом, это ограничение также использует @NotNull
ограничение, но также и ограничения с классом NotBlankValidator. Этот класс имеет isValid
метод, определенный как:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
Интересно, что этот метод возвращает true, если строка имеет значение NULL, и false тогда и только тогда, когда длина обрезанной строки равна 0. Это нормально, что он возвращает true, если она равна нулю, потому что, как я уже упоминал, @NotEmpty
определение также требует @NotNull
.
Вот несколько примеров:
Имя строки = null;
@NotNull
: false
@NotEmpty
: false
@NotBlank
: false
Строка name = "";
@NotNull
: истина
@NotEmpty
: ложь
@NotBlank
: ложь
Строка name = "";
@NotNull
: истина
@NotEmpty
: истина
@NotBlank
: ложь
String name = "Отличный ответ!";
@NotNull
: правда
@NotEmpty
: правда
@NotBlank
: правда
Мне понравилось объяснение в приведенной ниже ссылке: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: проверяет, не является ли значение нулевым, без учета содержимого
@NotEmpty: проверяет, не является ли значение пустым или нулевым. Если в нем есть только пустые места, он разрешит его как непустое.
@NotBlank: проверяет, не является ли значение нулевым или пустым, сначала обрезает значение. Это означает, что он не допускает только пустых пространств.
Итак, если вы хотите проверить, что поле не является нулевым, но также имеет не только пустые пробелы, но и текст, вам следует использовать @NotBlank.
@NotNull:
ограниченный CharSequence, Collection, Map или Array действителен, если он не равен NULL, но может быть пустым@NotEmpty:
ограниченный CharSequence, Collection, Map или Array действителен, если он не равен нулю и его размер / длина больше нуля.@NotBlank:
ограниченная строка действительна до тех пор, пока она не равна нулю и обрезанная длина больше нуля.