将validator.validate中的ConstraintViolation集合与ConstraintValidatorContext合并

Ada*_*zyk 5 java spring-mvc hibernate-validator bean-validation

是否有一些方法(除了foreach,但良好的foreach可能就足够了),从validator.valid自定义返回消息ConstraintValidator

简单的例子(是的,我正在尝试进行条件验证)

@TestFormConstraint
public class TestForm {

    @NotEmpty
    String foo;

    boolean checkBar = false;

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

    //getters & setters ...
}
Run Code Online (Sandbox Code Playgroud)
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;
    }

}
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Mic*_*aev 0

对于这种情况,您可以使用组。因此,删除checkBar字段并仅指定或不指定CheckBarGroup

喜欢

validator.validate(testForm)或者validator.validate(testForm, CheckBarGroup.class, Default.class)