jsr-303在验证期间从列表中排除了一些元素

时间:2016-07-08 15:41:03

标签: java bean-validation

我有这样的课程:

class From{
    private List<SubForm> subForms;
}

class SubForm{

    @NotBlank
    String name;

    @Max(value=100)
    Integer count;
    ...
    public boolen isValidatable(){
        ....
    }
}

我需要验证Form中的子表单列表,但我想排除返回isValidatable = false的元素。 我不能在Validator.validate()方法之前使用Form对象。我可以使用标准注释或编写自己的ConstraintValidator。 我怎么能做得更好?

1 个答案:

答案 0 :(得分:0)

我找到解决方案。 我创建了自己的注释并将其添加到List I want validate

上方
@ConditionallyValidatedListItems
private List<ConditionallyValidated> subforms = new ArrayList<>();

然后我创建ConstraintValidator。我在isValide方法中获得验证器,如果有必要验证项目

Validation.buildDefaultValidatorFactory().getValidator();
//get item check if it necessry to validte it    
Set<ConstraintViolation<ConditionallyValidated>> validate = validator.validate(conditionallyValidated);

我在github上创建了一个例子 https://github.com/YaroslavTir/jsr303-ConditionallyValidatedListItems