Hibernate 验证器 - 使用验证器进行 link 注释的方法
Hibernate validator - way to link annotation with validator
除了通过@Constraint 注释,是否有任何方法可以link 使用自定义验证器验证注释?
Unique.java
@Documented
//----@Constraint(validatedBy = { UniqueValidator.class })----//
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Unique {
String message() default "org.hibernate.validator.constraints.Unique.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
UniqueValidator.java
public class UniqueValidator implements ConstraintValidator<Unique, Object> {
@Override
public void initialize(Unique unique) {}
@Override
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
}
}
您始终需要 @Constraint
注释。 Bean Validation 的标记是我们有一个约束注解。但是,您可以使用空 validatedBy
值:
@Documented
@Constraint(validatedBy = { })
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Unique {
String message() default "org.hibernate.validator.constraints.Unique.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
如果将 validatedBy
留空,您有两个选择。如果您想坚持使用 Bean Validation 功能,可以通过约束映射文件(在 validation.xml
中列出)
使用 XML 配置
<constraint-mappings
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.1.xsd"
xmlns="http://jboss.org/xml/ns/javax/validation/mapping" version="1.1">
...
<constraint-definition annotation="com.acme.Unique">
<validated-by include-existing-validators="false">
<value>com.acme.UniqueValidator</value>
</validated-by>
</constraint-definition>
Hibernate Validator 5.2 还提供了提供者特定的功能来添加约束定义。看看 ConstraintDefintionContributor
- http://docs.jboss.org/hibernate/validator/5.2/reference/en-US/html_single/#section-constraint-definition-contribution。您可以在 bootstrap 提供自己的贡献者,或者您甚至可以使用 Java ServiceLoader 机制并添加一个 META-INF/services/javax.validation.ConstraintValidator
列出您的 ConstraintValidator
实现。
除了通过@Constraint 注释,是否有任何方法可以link 使用自定义验证器验证注释?
Unique.java
@Documented
//----@Constraint(validatedBy = { UniqueValidator.class })----//
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Unique {
String message() default "org.hibernate.validator.constraints.Unique.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
UniqueValidator.java
public class UniqueValidator implements ConstraintValidator<Unique, Object> {
@Override
public void initialize(Unique unique) {}
@Override
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
}
}
您始终需要 @Constraint
注释。 Bean Validation 的标记是我们有一个约束注解。但是,您可以使用空 validatedBy
值:
@Documented
@Constraint(validatedBy = { })
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
public @interface Unique {
String message() default "org.hibernate.validator.constraints.Unique.message";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
如果将 validatedBy
留空,您有两个选择。如果您想坚持使用 Bean Validation 功能,可以通过约束映射文件(在 validation.xml
中列出)
<constraint-mappings
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.1.xsd"
xmlns="http://jboss.org/xml/ns/javax/validation/mapping" version="1.1">
...
<constraint-definition annotation="com.acme.Unique">
<validated-by include-existing-validators="false">
<value>com.acme.UniqueValidator</value>
</validated-by>
</constraint-definition>
Hibernate Validator 5.2 还提供了提供者特定的功能来添加约束定义。看看 ConstraintDefintionContributor
- http://docs.jboss.org/hibernate/validator/5.2/reference/en-US/html_single/#section-constraint-definition-contribution。您可以在 bootstrap 提供自己的贡献者,或者您甚至可以使用 Java ServiceLoader 机制并添加一个 META-INF/services/javax.validation.ConstraintValidator
列出您的 ConstraintValidator
实现。