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)兄弟。"
这听起来像是在发生什么。但它并没有给出任何可能忽略它的线索。
答案 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 ***,但至少它现在正在运作。