我需要从我的自定义 Validator 调用 validator.validateProperty() 并寻找一种将 messageTemplate 和插值消息都传递给 ConstraintValidatorContext 的方法。我想要实现的是,如果给定的属性具有特定值而不是另一个属性的火验证。
MyCustomClassLevelValidator implements ConstraintValidator<Foo, Bar>{
@Autowired
private Validator validator
public boolean isValid(Bar bar,
ConstraintValidatorContext constraintValidatorContext){
if(bar.isSth()){
Set<ConstraintViolation<Bar>> somePropViolations = validator.validateProperty(bar, "someprop", Conditional.class);
for (ConstraintViolation<Bar> propertyViolation : somePropViolations) {
constraintValidatorContext.disableDefaultConstraintViolation();
constraintValidatorContext.buildConstraintViolationWithTemplate(propertyViolation.getMessageTemplate()).addNode(propertyViolation.getPropertyPath().toString())
.addConstraintViolation();
}
}
}
}
所以我的代码的问题是,当 Bar 被验证时,“someprop”上的约束违规没有完全插值(约束注释属性没有解决)
class Bar{
...
@Digits(groups=Conditional.class, integer=4,fraction=0)
String someProp;
}
所以当验证 Bar 时
Bar bar = new Bar();
bar.setSomeProp("99.9");
Set<ConstraintViolation<Bar>> constraintViolations = validator.validate(bar);
我看到数值超出范围(<{integer} 位>.<{fraction} 位> 预期)而不是数值超出范围(<4 位>.<0 位> 预期)
有什么方法可以将消息模板和消息文本(插值版本)都放在 constraintValidatorContext 上?