从自定义约束中引用其他bean值

时间:2016-06-22 19:39:42

标签: java hibernate jersey jersey-2.0 bean-validation

我正在为我的项目使用Hibernate Validator。我想使用自定义约束来引用约束验证器实现中的bean中的另一个字段。这怎么可能?

@NotNull(when="mvel:this.two == null")
private String one;

@NotNull(when="mvel:this.one == null")
private String two;

验证

public class NotNullValidator implements ConstraintValidator<NotNull, String> {

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //how do I get access to the parent bean here??
    }
}

我正在使用Hibernate 5.0.0,Jersey 2.6,JBoss 5,Java 6。

1 个答案:

答案 0 :(得分:0)

简短的回答是你不能。可用于字段验证的当前上下文信息不允许您访问整个bean实例。至少现在不行。有关于将根bean添加到上下文的讨论,但根据Bean Validation规范,根bean不可用。这背后的原因是 Validator 的某些方法没有bean实例($("#datepicker").datepicker('setDate', null); )。然后,约束可能会通过或失败,具体取决于使用的验证方法。

如果要比较/引用多个字段,则需要自定义类级别约束。