Java 在返回类型上使用@NotEmpty时出现hibernate验证程序错误

Java 在返回类型上使用@NotEmpty时出现hibernate验证程序错误,java,spring,hibernate,spring-boot,hibernate-validator,Java,Spring,Hibernate,Spring Boot,Hibernate Validator,这是我的示例应用程序和它的。我已经在as@NotEmpty上定义了一些约束。当我想调用此存储库时,我遇到了以下问题 javax.validation.ConstraintDeclarationException:HV000141:constraint org.hibernate.validator.constraints.NotEmpty使用了ConstraintTarget#隐式,其中无法推断目标。 我是否需要为@NotEmpty实现验证器,或者这是hibernate或我的spring boo

这是我的示例应用程序和它的。我已经在as
@NotEmpty
上定义了一些约束。当我想调用此存储库时,我遇到了以下问题

javax.validation.ConstraintDeclarationException:HV000141:constraint org.hibernate.validator.constraints.NotEmpty使用了ConstraintTarget#隐式,其中无法推断目标。

我是否需要为
@NotEmpty
实现验证器,或者这是hibernate或我的spring boot应用程序中的错误


注意当我从返回类型中删除
@NotEmpty
时,它会起作用。

您在这里遇到了一个有趣的情况,对于纯合成约束,无法确定它是应用于参数还是方法的返回值。回到Bean Validation 1.1的时代,将此问题留给实现来处理,因为这种情况非常罕见

Hibernate Validator允许在约束定义上解决这种情况
@SupportedValidationTarget(ValidationTarget.ANNOTATED_元素)
。这是在HV 5.2中添加的,但是我们似乎忘记了将其用于
@NotEmpty
以及HV定义的其他纯合成约束。因此,您能在我们的网站上提交一份错误报告吗

注意,您不应该对Bean Validation 2.0(HV 6.0)中定义的
@NotEmpty
有问题,因为这不是一个纯粹的组合约束


更新:此问题已在Hibernate Validator 6.0.3.Final中修复(并向后移植到5.3.6.Final和5.4.2.Final)。

能否将代码放回此处,使问题更易于阅读(用于测试和回购)。这似乎是HV中的一个错误,因为5.3和5.4似乎都缺少NotEmpty Validator实现。如果你想在字符串中使用它,就像你的例子一样,你也可以考虑看<代码> @ NoBLUT——如果约束符合你的需要,这个可以很好地工作。或者我也建议升级到Hibernate Validator 6.0。这是最新版本,有很多改进。(但在6.0的情况下,您需要在配置中做一些更改…)实际上,HV的-
@NotEmpty
约束是一个复合约束,没有针对它的验证程序实现,因为它应该使用大小和非空验证程序的组合。这就是导致这个问题的原因(看起来仍然是一个bug,但与我在前面的评论中所说的略有不同…)我曾尝试使用HV6,但出现了一些配置错误,我没有时间修复它。也许我会研究一下,但有趣的是,这个“bug”已经存在很长时间了。如果通过XML约束映射为
@NotEmpty
添加虚拟的
ConstraintValidator
,它应该可以解决这个问题。它的
isValid()
方法将始终返回
true
,但它的存在将导致解析算法将约束(以及它的组合约束)应用于方法返回值,而不是参数。谢谢,我已经创建了