自定义类级别bean验证约束

时间:2015-10-01 06:50:31

标签: constraints bean-validation class-level

我已经知道如何在Entity类中的特定属性上添加基于注释的验证,如: -

public class Person {

    @NotNull
    private String firstName;

    private String lastName;

    //...
}

但是可以在类Person上添加注释,以便通过创建自定义验证类并在那里处理验证来验证此类中的所有属性: -

@Retention(value = RetentionPolicy.RUNTIME)      
@Target(value = ElementType.METHOD)
public @interface PersonneName {
public String firstName();
}

我正在开发一个项目,从数据库中获取约束并创建自定义验证类,并根据从DB获得的constaints应用Entity类属性。 请建议。

2 个答案:

答案 0 :(得分:0)

当然有可能,只需查看有关如何编写自定义类级别约束的文档 - http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#section-class-level-constraints

当然,重要的是确保可以将约束注释放在类型级别上。为此,您需要将ElementType.TYPE添加到@Target注释。

答案 1 :(得分:0)

是的,当然可以。首先,创建注释的定义。就像您在示例中所做的一样,但是使用了另一种@Target类型

@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = PersonValidator.class)    
public @interface ValidPerson {
    String message () default "Your custom message";
    Class<?>[] groups () default {};
    Class<? extends Payload>[] payload () default {};
}

然后实现验证器,该验证器的isValid方法采用您的Person类的实例:

 public class PersonValidator implements ConstraintValidator<ValidPerson, Person> {

    @Override
    public boolean isValid (Person person, ConstraintValidatorContext context) {
        // your validation logic
    }
}