【问题标题】:Hibernate validator - way to link annotation with validatorHibernate 验证器 - 将注释与验证器链接的方法
【发布时间】:2015-04-08 16:09:58
【问题描述】:

除了@Constraint 注释外,还有什么方法可以将验证注释与自定义验证器链接起来?

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) {
    }
}

【问题讨论】:

    标签: hibernate validation bean-validation hibernate-validator


    【解决方案1】:

    您总是需要@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。您可以在引导程序中提供自己的贡献者,或者您甚至可以使用 Java ServiceLoader 机制并添加一个 META-INF/services/javax.validation.ConstraintValidator 列出您的 ConstraintValidator 实现。

    【讨论】:

    • 谢谢,我已经尝试使用 ConstraintDefintionContributor 解决方案,但没有成功,但 validation.xml 工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2015-07-14
    • 1970-01-01
    • 2015-02-03
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多