カスタム 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();
}
}
}
}
したがって、私のコードの問題は、バーが検証されたときに、「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);
範囲外の数値 (<4 桁>.<0 桁> が必要) ではなく、範囲外の数値 (<{integer} 桁>.<{fraction} 桁> が必要) が表示される
メッセージ Template とメッセージ テキスト (補間されたバージョン) の両方を constraintValidatorContext に配置する方法はありますか?