Я, здається, не зможу знайти підсумок, який розрізняє різницю цих трьох анотацій.
Я, здається, не зможу знайти підсумок, який розрізняє різницю цих трьох анотацій.
Відповіді:
@NotNull: Об'єкт CharSequence, Collection, Map або масив не є нульовим , але може бути порожнім.
@NotEmpty: Об'єкт CharSequence, Collection, Map або масив не має нульового розміру> 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, якщо рядок є нульовим, але false, якщо і лише тоді, коли довжина обрізаної рядка дорівнює 0. Це нормально, що він повертає true, якщо він є нульовим, оскільки, як я вже згадував, це @NotEmptyвизначення також вимагає @NotNull.
Ось кілька прикладів:
Назва рядка = null;
@NotNull: false
@NotEmpty: false
@NotBlank: false
Ім'я рядка = "";
@NotNull: true
@NotEmpty : false
@NotBlank: false
Ім'я рядка = "";
@NotNull: true
@NotEmpty : true
@NotBlank : false
Рядок name = "Чудова відповідь!";
@NotNull: true
@NotEmpty : true
@NotBlank : true
Мені сподобалось пояснення за посиланням нижче: http://www.itprogrammingtutorials.com/2015/java/hibernate/hibernate-validator-diff-notblank-notempty/
@NotNull: перевіряє, чи значення не є нульовим, не зважаючи на вміст
@NotEmpty: Перевіряє, чи значення не є нулевим чи порожнім. Якщо в ньому просто порожні пробіли, це дозволить йому бути не порожнім.
@NotBlank: Перевіряє, чи є значення не нульовим чи порожнім, спочатку обрізаючи значення. Це означає, що він не дозволить просто порожні місця.
Отже, якщо ви хочете перевірити, що поле не є нульовим, але також, що воно має не просто порожні пробіли, а текст, слід використовувати @NotBlank.
@NotNull: обмежена CharSequence, Collection, Map або масив дійсні до тих пір, поки це не буде нульовим, але воно може бути порожнім@NotEmpty: обмежений CharSequence, Collection, Map або масив дійсний до тих пір, поки він не буде нульовим, а його розмір / довжина більше нуля.@NotBlank: обмежена рядок дійсна до тих пір, поки вона не буде нульовою і обрізана довжина більше нуля.