JSR 303 - ограничение композиции - PullRequest
1 голос
/ 22 декабря 2010

Как мне выполнить ConstraintValidator в ConstraintValidator?

У меня есть пользовательский @NotEmpty, и у меня есть пользовательский ConstraintValidator для каждого типа, и он отлично работает.

Теперь я хочу создать ограничение на уровне класса, которое проверяет, что хотя бы одно из указанных полей не является пустым, используя те пользовательские ConstraintValidator, которые у меня уже есть.Часть ограничения (@ClassNotEmpty) выполнена, но проблема заключается в реализации ConstraintValidator.Как получить экземпляр ConstraintValidator для данного ограничения?то есть

isValid(Object value, ConstraintValidatorContext constraintValidatorContext)  {
    String[] fieldValues = getFieldValues(value, this.classNotEmpty.fieldNames());

    for (String fieldValue : fieldValues) {
        <What do I put here?>.isValid(fieldValue, constraintValidatorContext);
    }
}

Есть ли способ сделать это без перетаскивания подпрограммы проверки на вспомогательный класс?

Кстати, я использую Spring и Hibernate Validator.

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

После дальнейших исследований выясняется, что нет известного решения для получения экземпляра ConstraintValidator для данного ограничения, переносимого или нет.Похоже, что вспомогательный класс - единственный способ сделать это.

0 голосов
/ 23 декабря 2010

У меня нет информации передо мной, но я помню, что читал кое-что о валидаторах, которые состоят из других валидаторов.Поэтому, если у вас есть два валидатора A и B. Вы можете определить третий «C», который состоит из двух других.Охотьтесь через документ, вы должны его найти.

Только что сделал поиск, прочитайте это: http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html/validator-customconstraints.html#validator-customconstraints-compound

Это может быть то, что вы ищете.

...