【问题标题】:Constraint validator to validate a field in Child class based on another field in Parent class约束验证器根据父类中的另一个字段验证子类中的字段
【发布时间】:2019-08-10 11:46:45
【问题描述】:

我有 2 个域类,例如 ParentClassChildClass。 (ParentClass 包含 Array 列表中的 Child 类对象的列表。)

我为 ParentClass 和 ChildClass 创建了单独的 Validator 类来进行自定义验证。

Parent 类的示例验证器类:

    public class ParentClassValidator implements 
ConstraintValidator<ValidatedByParentClassInterface, ParentClass> {

然后覆盖ConstraintValidatorisValid()方法,

    @Override
    public boolean isValid(final ParentClass parentClass, 
                     final ConstraintValidatorContext constraintValidatorContext) {

Child 类的示例验证器类:

public class ChildClassValidator implements 
    ConstraintValidator<ValidatedByChildClassInterface, ChildClass> {

然后覆盖ConstraintValidatorisValid()方法,

    @Override
            public boolean isValid(final ChildClass childClass, 
               final ConstraintValidatorContext constraintValidatorContext) { 
   //No option to pass Parent class object here?

我的 Child 类中的一个字段需要根据 Parent 类中字段的值进行验证。但是 ConstraintValidator(https://docs.oracle.com/javaee/7/api/javax/validation/ConstraintValidator.html) 的 isValid() 方法只有 2 个参数,那么如何在 ChildClassValidator 中传递 ParentClass 对象?

或者我应该在我的 ParentClassValidator 中使用 for 循环来验证这个场景吗?

【问题讨论】:

    标签: java bean-validation


    【解决方案1】:

    看起来在我的 ParentClassValidator 中使用 for 循环来验证这种情况是唯一可能的解决方案

    因此,与其拥有 2 个验证器,即 1 个用于父类,1 个用于 chid 类,不如将所有自定义验证(包括子类验证)放在父类验证器中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 2018-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多