javax.validation.NotBlank 缺少验证器

javax.validation.NotBlank missing validator

我要求在公共 api 模块(多模块项目)中我不能使用任何类型的休眠验证注释,所以我确实使用了 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 是否工作相同(我的意思是它是否验证字符串?)

如何解决?

问题出在你当时使用的版本上。您需要更新到 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 系列中。

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

<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>

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;