hibernate 5.4.2 UnwrapValidatedValue自动

时间:2017-11-22 13:48:19

标签: hibernate-validator

我们从HV 4.x升级到HV 5.4.2,现在我们有了如下界面

@NotNull
List<AccountInfo> getMultiClientAccountBalances(@NotNull ClientContext clientContext, @NotNull Optional<AccountFilter> accountFilter);

我收到错误:

javax.validation.UnexpectedTypeException: HV000186: The constraint of type 'javax.validation.constraints.NotNull' defined on 'getMultiClientAccountBalances.arg1' has multiple matching constraint validators which is due to an additional value handler of type 'org.hibernate.validator.internal.engine.valuehandling.OptionalValueUnwrapper'. It is unclear which value needs validating. Clarify configuration via @UnwrapValidatedValue.

我知道可以通过向字段添加@UnwrapValidatedValue来修复它,但必须将其添加到每个方法中,这对我来说有很多工作要做。有没有更简单的解决方案(除了升级到HV6.x)

1 个答案:

答案 0 :(得分:1)

不幸的是,我没有看到如何在不破坏其他用例的情况下改变5.4中的这种行为。

并且没有简单的方法来禁用可选值处理程序,因为它是无条件添加的。

所以我会说你有两个解决方案:

  1. 搜索并替换所有@Constraint可选以添加UnwrapValidatedValue选项
  2. 或转到HV 6,在那里我们完全重写了这个功能,我认为它应该按照您的预期工作。我知道你不想要这个答案,但事实就是这样......
  3. 1.问题是我们从HV中删除了这个注释(它是实验性的),支持Bean Validation中包含的标准功能,因此在移动到6时必须将其删除。

    我不知道您的确切环境,但HV 6与之前的版本高度兼容,因此它可能非常有效。当我们将工件的groupId从org.hibernate更改为org.hibernate.validator时,请注意依赖关系。另请注意,您需要将validation-api从1.1更新为2.0。

    6已经非常稳定了,如果您有任何问题,我们会马上修复它们。