是否有一些方法(除了 foreach,但好的 foreach 可能就足够了)从自定义 ConstraintValidator
返回来自 validator.valid
的消息?
简单示例(是的,我正在尝试进行条件验证)
@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;
}
}
有什么想法吗?
最佳答案
您可以在这种情况下使用群组。
因此,删除 checkBar
字段并仅指定或不指定 CheckBarGroup
。
喜欢
validator.validate(testForm)
或 validator.validate(testForm, CheckBarGroup.class, Default.class)
关于java - 将 validator.validate 中的 ConstraintViolation 集与 ConstraintValidatorContext 合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7795530/