我要求在常见的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一样(我的意思是它验证字符串吗?)
怎么解决这个?
问题出在你正在使用的版本中。您需要更新到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.0is部分和验证器在5.3系列中没有出现。
作为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>