SmartValidator - 手动调用组验证

SmartValidator - manually calling validate with groups

Spring 4.3.2

我需要手动调用 SmartValidator.validate() 并且我需要它利用我在目标实体上定义的验证组。 javadoc 是这样说的...

"This variant of validate() supports validation hints, such as validation groups against a JSR-303 provider (in which case, the provided hint objects need to be annotation arguments of type Class)."

void validate(Object target,
          Errors errors,
          Object... validationHints)

出于某种原因,我找不到很多关于使用 "validationHints" 的信息或示例。所以我一直在尝试下面的事情......

validator.validate(targetEntity, errors, new Class[]{ValidationGroup1.class});

validator.validate(targetEntity, errors, ValidationGroup1.class);

到目前为止,它完全忽略了我的分组。它总是调用所有验证器。有什么想法吗?

谢谢!

===================================

更新:javadoc 也这样说..

"Note: Validation hints may get ignored by the actual target Validator, in which case this method should behave just like its regular Validator.validate(Object, Errors) sibling."

这听起来像是正在发生的事情。但它没有给出任何关于为什么它可能会忽略它的线索。

那好吧。 'answer' 似乎不为此使用 Spring。这是我的解决方法...

import javax.validation.Validator;
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation> violations = validator.validate(targetEntity, new Class[]{group1.class, group2.class});

然后我将 Set 转换为 Spring FieldErrors(因为所有内容都已配置为 运行 Spring)。有点像 clusterf***,但至少它现在可以正常工作了。