【问题标题】:Configuring custom validation with validator dependancy injection使用验证器依赖注入配置自定义验证
【发布时间】:2017-08-17 16:10:02
【问题描述】:

我正在尝试使用 Hibernate Validation 6.0.1 定义约束定义,其中验证器相对于约束注释位于不同的位置(.jar/project)。 Aka,我有我想要验证的对象,这些对象位于项目“api”中,带有注释定义,但我将在项目“modules/common”中拥有验证器

我正在关注the documentation 中描述的内容。

配置文件

@Bean
public Validator validator() {

    HibernateValidatorConfiguration configuration = Validation
            .byProvider( HibernateValidator.class )
            .configure();

    ConstraintMapping constraintMapping = configuration.createConstraintMapping();

    constraintMapping
            .constraintDefinition(ValidationComplexePerson.class)
                .validatedBy(ValidationComplexePersonValidator.class);

    return configuration.addMapping( constraintMapping )
            .buildValidatorFactory()
            .getValidator();

约束注解

@Documented
@Constraint(validatedBy = { })
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
public @interface ValidationComplexePerson {
...}

验证器

public class ValidationComplexePersonValidator 
     implements ConstraintValidator<ValidationComplexePerson, Personne> {

@Override
public void initialize(ValidationComplexePerson constraintAnnotation) {
}

@Override public boolean isValid(
          Personne personne, 
          ConstraintValidatorContext constraintValidatorContext) {
    if (personne.nom.matches(".*\\d+.*")) {
        return false;
    }
    return true;
}

我的问题 我遇到的问题是,如果我没有将“@Constraint(validatedby={})”放在注释中,我会收到错误

HV000116:注解类型必须在创建约束定义时使用@javax.validation.Constraint 进行注解。

当到达 Bean 配置中的“.constraintDefinition”时。

另一方面,如果我输入“@Constraint(validatedby={})”,我会得到 ​​p>

错误:(17, 1) java: 对于非组合约束,验证器 必须使用@Constraint#validatedBy() 指定实现。

关于这个解决方案可以穿什么或替代方案的任何建议?

我也尝试了here提供的程序。

【问题讨论】:

    标签: java validation javabeans bean-validation hibernate-validator


    【解决方案1】:

    我怀疑您正在使用注释处理器,因为您的第二个错误来自它?

    问题是在这种情况下注释处理器检查不正确。我认为我们可能应该删除它,因为无法使用编程 API 进行此检查。

    现在只需删除注释处理器,它应该可以正常工作。

    我打开https://hibernate.atlassian.net/browse/HV-1470 来跟踪这个问题。

    【讨论】:

    • 它很有用,因为它提供了有关如何使用 HV 的提示。但我们确实需要它不会为有效配置抛出错误。
    猜你喜欢
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2014-01-15
    • 2014-09-24
    相关资源
    最近更新 更多