Кажется, я не могу найти краткое изложение, которое бы различало разницу между этими тремя аннотациями.
Кажется, я не могу найти краткое изложение, которое бы различало разницу между этими тремя аннотациями.
Ответы:
@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: ограниченная строка действительна до тех пор, пока она не равна нулю и обрезанная длина больше нуля.