6

Is there some method (other than foreach, but good foreach could be sufficient), to return messages from validator.valid from custom ConstraintValidator ?

Simple example (yes, I'm trying to do conditional validation)

@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;
    }

}

Any idea?

jeha
  • 10,562
  • 5
  • 50
  • 69
Adam Jurczyk
  • 2,153
  • 12
  • 16

1 Answers1

0

You may use groups for such cases. So, remove checkBar field and just specify or not CheckBarGroup.

like

validator.validate(testForm) or validator.validate(testForm, CheckBarGroup.class, Default.class)

Michail Nikolaev
  • 3,733
  • 22
  • 18