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.NotBlank
是 Bean 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;
我要求在公共 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.NotBlank
是 Bean 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;