SmartValidator - 手动调用组验证

时间:2016-08-29 15:14:57

标签: spring validation bean-validation spring-web

Spring 4.3.2

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

  

" validate()的这个变体支持验证提示,例如   针对JSR-303提供程序的验证组(在这种情况下,   提供的提示对象需要是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也说了这个..

  

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

这听起来像是在发生什么。但它并没有给出任何可能忽略它的线索。

1 个答案:

答案 0 :(得分:5)

好吧。 似乎'答案'是不使用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 ***,但至少它现在正在运作。