我要求在常见的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一样(我的意思是它是否验证了字符串?)
如何解决这个问题?
答案 0 :(得分:8)
问题出在您正在使用的版本中。您需要更新到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系列中没有验证器。
答案 1 :(得分:0)
为baeldung.com say,根据JSR 380规范,validation-api依赖项包含标准的验证API:
files.forEach
Hibernate Validator是验证API的参考实现。 要使用它,我们必须添加以下依赖项:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.0.Final</version>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>