我需要创建一个自定义约束注释,该注释可以访问我的bean的另一个字段的值。我将使用此批注来验证字段,因为它取决于另一个字段的值,但是我定义该字段的方式是编译器在我的字段“必须为常量表达式”中说“批注属性的值”。
我以这种方式定义了它:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy=EqualsFieldValidator.class)
@Documented
public @interface EqualsField {
public String field();
String message() default "{com.myCom.annotations.EqualsField.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
public class EqualsFieldValidator implements ConstraintValidator<EqualsField, String>{
private EqualsField equalsField;
@Override
public void initialize(EqualsField equalsField) {
this.equalsField = equalsField;
}
@Override
public boolean isValid(String thisField, ConstraintValidatorContext arg1) {
//my validation
}
}
在我的豆子中,我想要这样的东西:
public class MyBean{
private String field1;
@EqualsField(field=field1)
private String field2;
}
有什么方法可以定义注释,以便字段值可以是变量?
谢谢
最简单的方法是退后一步:您编写的约束/验证器在字段级别上起作用,但是您要强制执行的是跨字段依赖项,即类级别约束。
重写您的约束和验证器以在类级别上工作(即,注释将在类上,而不是在字段上)。这样,您将可以访问整个班级。在您的isValid(..)方法中,只需对两个字段进行一次获取,比较并适当返回即可。
我有一个名为的下拉字段,其中包含电话、电子邮件等值,还有一个名为的输入字段。如果选择了下拉值,我想验证输入字段的有效电子邮件地址。。。 我试图创建一个自定义约束,将验证字段对电子邮件正则表达式,如果字段将具有值 我有以下自定义约束的代码 验证器就像 问题是它没有在表单上触发...我使用模型对话框,其中要验证的bean被呈现 参考:使用Hibernate验证器进行跨域验证(JSR 303) 期待您的
我在数据库中有Consumer表,其中Consumer_type列上有check约束,如下所示: 现在,从hibernate方面,我想添加check约束注释,该注释只允许消费者类型表中的“ACCOUNT”和“ORGANIZATION”值。 为此,我应该使用哪个hibernate/jpa注释?
我正在尝试创建自己的复合验证注释来验证字符串——到目前为止,它由注释@NotNull、@NotBlank和@Size组成 但是,我不想让它们保持默认值,而是希望能够传入一个参数值,例如,如果我执行@ValidString(min=1,max=50),那么@Size注释可以读取这些值——这可能吗? 我的约束-
null
我有一个2个实体和,其中引用。这是一个多(子)对一个(父)关系,定义如下: 和 Micronaut Data在创建架构时执行以下SQL查询: 创建一个表<code>parent_entity</code>(<code>id</code>BIGINT不为空,<code>name</code>VARCHAR(255)不为空); 创建表< code > child _ entity (< code >
我们正在开发REST服务,并希望使用JSR303进行输入数据验证,但这里的问题是所有模型对象都是从groovy DSL生成的,并将作为jars导入。因此,在对象字段之上编写JSR-303注释没有灵活性。 那么,有没有其他方法可以不用注释使用JSR-303,可以通过XML配置吗?或者在这种情况下,请提供任何验证建议。 谢啦