我已经知道如何在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类属性。 请建议。
答案 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
}
}