И / или условие в проверке на основе аннотации Spring - PullRequest
7 голосов
/ 13 февраля 2012

Я использую проверку на основе аннотаций Spring 3.Я хочу добавить следующую проверку для строковых полей

Поле может быть пустым ИЛИ оно должно содержать непустую строку

Я знаю аннотацию типа@Null, @NotEmpty но как я могу использовать оба с условием ИЛИ?


Решение:

Использование @Size(min=1) помогает, но не обрабатывает пробелы.Поэтому добавили пользовательскую аннотацию NotBlankOrNull, которая будет разрешать null и непустые строки, а также обрабатывать пробелы.Большое спасибо @ Ralph.
Вот моя аннотация

@Documented
@Constraint(validatedBy = { NotBlankOrNullValidator.class })
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface NotBlankOrNull {
    String message() default "{org.hibernate.validator.constraints.NotBlankOrNull.message}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };
}

Класс валидатора

public class NotBlankOrNullValidator implements ConstraintValidator<NotBlankOrNull, String> {

    public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
        if ( s == null ) {
            return true;
        }
        return s.trim().length() > 0;
    }

    @Override
    public void initialize(NotBlankOrNull constraint) {

    }
} 

Я также обновил его на своем сайте .

1 Ответ

5 голосов
/ 13 февраля 2012

Прежде всего, это не проверка на основе аннотаций Spring, это проверка компонентов JSR 303, реализованная, например, с помощью проверки гибернации.Это на самом деле не связано с пружиной /

Вы не можете объединить аннотации в порядке ИЛИ *.

Но есть простой обходной путь для ненулевого ограничения, потому что самый основнойпроверки принимают ноль в качестве допустимого ввода (поэтому вам часто нужно комбинировать базовые проверки и дополнительный @NotNull, если вы хотите иметь «нормальное» поведение, но не то, что вы просили).

Например:@javax.validation.constraints.Size принять значение NULL в качестве допустимого значения.

Так что в вашем случае вам нужно использовать @Size(min=1) вместо @NotEmpty.

КСТАТИ: Не @NotEmpty это просто комбинация@NotNull и @Size(min = 1)

*, за исключением того, что вы реализуете это сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...