【问题标题】:javax.validation.NotBlank missing validatorjavax.validation.NotBlank 缺少验证器
【发布时间】:2018-10-05 15:03:11
【问题描述】:

我要求在通用 api 模块(多模块项目)中我不能使用任何类型的 hibernate 验证注释,所以我确实使用了 javax.validation 中的一个,这是可以接受的。

当我想验证包含 NotBlank 注释的域对象(我使用 vaadin)时,问题就开始了。我得到以下异常

javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.String'. Check configuration for 'name'

通过调用调用验证

Validation.buildDefaultValidatorFactory().validateValue(beanType, propertyName, value)

相同的代码与hibernate的NotBlank完美配合

javax 中的 @Size @NotNull 也可以正常工作。

是否可以向 DefaultValidatorFactory 提供 NotBlank 验证器实现?

我是否缺少一些依赖项? (我已经有hibernate-validator了)

来自 javax 的 NotBlank 是否与来自 hibernate 的 NotBlank 工作方式相同(我的意思是它是否验证字符串?)

如何解决?

【问题讨论】:

  • 你能说出你有哪个版本的hibernate-validator吗?
  • 您在此注释上使用的是什么类型的对象?整数 ?字符串?
  • 它的 5.3.6.final
  • 验证字段如下所示 @NotBlank @Size(min = 1, max = 250) private String name;
  • 好的,你使用的是 spring boot starter-web 吗?如果不是,您是否包括此依赖项? org.springframework.bootspring-boot-starter-validation

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


【解决方案1】:

问题出在您当时使用的版本上。您需要更新到 6.0.x 系列。目前最新的是6.0.9。请注意,groupId 更改为 org.hibernate.validator。

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.9.Final</version>
</dependency>

javax.validation.constraints.NotBlankBean Validation 2.0 的一部分,它的验证器在 5.3 系列中不存在。

【讨论】:

  • 在父模块中,我们有最新版本的休眠验证器(属性)。然而,在我使用的模块中,我也有 vaadin 依赖项,它依赖于 spring-boot-starter-web ,它具有这个旧的验证器版本。我以为我有最新的。很高兴这很快!谢谢
【解决方案2】:

as baeldung.com say 根据 JSR 380 规范,validation-api 依赖项包含标准验证 API:

<dependency>
  <groupId>javax.validation</groupId>
   <artifactId>validation-api</artifactId>
<version>2.0.0.Final</version>

Hibernate Validator 是验证 API 的参考实现。 要使用它,我们必须添加以下依赖项:

<dependency>
   <groupId>org.hibernate.validator</groupId>
   <artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>

<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>6.0.2.Final</version></dependency>

【讨论】:

    【解决方案3】:

    Validation-api 2.0.1 包含 javax.validation.constraints.NotBlank,它是 Hibernate 的 NotBlank 的替代品。要使用它,您需要依赖:

     <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>2.0.1.Final</version>
     </dependency>
    

    然后在代码中

    @NotBlank 
    private String possibleBlankString;
    

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多