Слияние набора ConstraintViolation из validator.validate с ConstraintValidatorContext - PullRequest
5 голосов
/ 17 октября 2011

Есть ли какой-нибудь метод (кроме foreach, но хорошего foreach может быть достаточно), чтобы вернуть сообщения из validator.valid из пользовательских ConstraintValidator?

Простой пример (да, я пытаюсь сделатьусловная проверка)

@TestFormConstraint
public class TestForm {

    @NotEmpty
    String foo;

    boolean checkBar = false;

    @NotEmpty(groups=CheckBarGroup.class)
    String bar;

    //getters & setters ...
}
public class TestFormValidator 
        implements ConstraintValidator<TestFormConstraint, TestForm> {

    @Autowired
    private Validator validator;

    @Override
    public void initialize(ValidTestForm constraintAnnotation) {}

    @Override
    public boolean isValid(TestForm form, ConstraintValidatorContext context) {
        if(form.isCheckBar()){
            Set<ConstraintViolation<TestForm>> con = 
                    validator.validate(form, CheckBarGroup.class);
            if(!con.isEmpty()){
                //ok, so what to do here? iterate over con and for each msg 
                //call context.buildConstraintViolationWithTemplate ?
                return false;
            }
        }
        return true;
    }

}

Есть идеи?

1 Ответ

0 голосов
/ 22 февраля 2013

Вы можете использовать группы для таких случаев.Итак, удалите поле checkBar и просто укажите или нет CheckBarGroup.

как

validator.validate(testForm) или validator.validate(testForm, CheckBarGroup.class, Default.class)

...