SmartValidator - 手动调用组验证

Jim*_*Ott 6 validation spring bean-validation spring-web

春季4.3.2

我需要手动调用SmartValidator.validate(),我需要它使用我在目标实体上定义的验证组.javadoc说这个......

"validate()的这个变体支持验证提示,例如针对JSR-303提供程序的验证组(在这种情况下,提供的提示对象需要是类型为Class的注释参数)."

void validate(Object target,
          Errors errors,
          Object... validationHints)
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我找不到有关使用"validationHints"的更多信息或示例.所以我一直在尝试以下内容......

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

validator.validate(targetEntity, errors, ValidationGroup1.class);
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

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

更新:javadoc也说这个..

"注意:实际目标Validator可能会忽略验证提示,在这种情况下,此方法的行为应与其常规Validator.validate(Object,Errors)兄弟一样."

这听起来像正在发生的事情.但它没有提供任何线索,为什么它可能会忽略它.

Jim*_*Ott 6

好吧那么.似乎'答案'是不使用Spring.这是我的解决方法......

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

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