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

标签 java spring-mvc bean-validation hibernate-validator

是否有一些方法(除了 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/

相关文章:

java - 如何将@ConvertGroup与@GroupSequenceProvider一起使用

java - 为什么 java String.replaceAll 正则表达式删除了它不应该删除的部分字符串?

Java在synchronized block 中调用其他方法

java - 使用 Hibernate Criteria 投影限制选定字段

java - Maven-在当前项目和插件组中找不到前缀 'spring-boot' 的插件

java - Spring 闪光范围

java - Spring Boot 禁用/错误映射

java - 如何在 Spring 的一个 ConstraintValidator 中同时验证 @PathVariable 和 @RequestBody?

java - Maven 和 java : missing generated code for service in test directory

java - 使 javax 验证错误消息更具体