当前位置: 首页 > 知识库问答 >
问题:

使用验证器依赖注入配置自定义验证

袁鸿雪
2023-03-14

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

我遵循文档中的描述。

配置文件

@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;
}

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

HV000116:注释类型必须使用@javax进行注释。验证。创建约束定义时的约束。

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

另一方面,如果我把@Constraint(validatedby={})",

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

对这个解决方案有什么可行或替代方案有什么建议吗?

我也尝试了这里介绍的程序。

共有1个答案

井轶
2023-03-14

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

问题是在这种情况下注释处理器检查不正确。我认为我们可能应该删除它,因为没有办法使此检查与编程API一起工作。

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

我打开了https://hibernate.atlassian.net/browse/HV-1470跟踪此问题。

 类似资料:
  • 我创建了一个自定义验证属性,我想将其用于 API 控制器 DTO。此属性需要来自已配置选项的值,这就是我在构造函数中注入这些值的原因,以便我以后可以在 和 方法中使用选项服务。 不幸的是,当我想在DTO中将其用作属性时 我收到错误信息 没有给出对应于'MyValidationAttribute.MyValidationAttribute(IOptionsMonitor)'所需形式参数'myOpti

  • 那里是自定义验证器: 当我调用时,我在插入的的上得到了一个。 我假设Spring会正确地注入定制验证器,我必须告诉他。但是,我不知道怎么做。我已经尝试了一些通过堆栈溢出和谷歌找到的东西,但没有运气。 任何帮助都将不胜感激。

  • 在MVC中,我可以创建一个模型验证器,它可以接受依赖关系。我通常使用FluentValidation来实现这一点。例如,这允许我在帐户注册时检查电子邮件地址是否未被使用(注意:这是一个简化的示例): Web API与FluentValidation不存在这样的集成。在这方面已经进行了几次尝试,但都没有解决依赖注入方面,并且只使用静态验证器。 这是由于MVC和Web API在ModelValidat

  • 我正在开发spring mvc应用程序,我应该在spring mvc validator的基础上应用验证。第一步,我为类和设置控制器添加了注释,效果很好。现在我需要实现自定义验证器来执行复杂的逻辑,但我想使用现有的注释并添加额外的检查。 我的用户类: 我的验证器: 我的控制器: 那么,有可能同时使用自定义验证器和注释吗?如果是,怎么做?

  • 我正在尝试编写一个自定义bean验证器,并根据用户界面上的语言环境显示验证消息。 为此,我创建了一个验证器,如下所示: 我还注册了messageSource和validator bean: 在我的控制器中,我使用initBinder注册我的验证器: 不过,验证错误消息在用户界面上显示为{myproject.myclass.validation.name}。即使我设置了LocalValidatorF

  • 表单验证发生在数据验证之后。如果你需要定制化这个过程,有几个不同的地方可以修改,每个地方的目的不一样。表单处理过程中要运行三种类别的验证方法。它们通常在你调用表单的is_valid() 方法时执行。还有其它方法可以触发验证过程(访问errors 属性或直接调用full_clean() ),但是通用情况下不需要。 一般情况下,如果处理的数据有问题,每个类别的验证方法都会引发ValidationErr