Java 在ConstraintValidatorContext上设置插值模板和消息模板
我需要从自定义验证器调用validator.validateProperty(),并寻找将messageTemplate和插值消息传递给ConstraintValidatorContext的方法。 我想要实现的是,如果给定的属性有一个特定的值,则会对另一个属性进行火验证Java 在ConstraintValidatorContext上设置插值模板和消息模板,java,bean-validation,Java,Bean Validation,我需要从自定义验证器调用validator.validateProperty(),并寻找将messageTemplate和插值消息传递给ConstraintValidatorContext的方法。 我想要实现的是,如果给定的属性有一个特定的值,则会对另一个属性进行火验证 MyCustomClassLevelValidator implements ConstraintValidator<Foo, Bar>{ @Autowired private Validator validator
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 bar = new Bar();
bar.setSomeProp("99.9");
Set<ConstraintViolation<Bar>> constraintViolations = validator.validate(bar);
Bar=newbar();
bar.setSomeProp(“99.9”);
Set constraintViolations=validator.validate(bar);
我看到数值超出范围(.expected)
而不是
数值超出界限(.expected)
有没有办法将消息模板和消息文本(插入版本)都放在constraintValidatorContext上?我认为从约束验证器实现中调用
验证器不是一个好主意,因为在再次验证同一对象时,这可能很容易导致无休止的循环,它承载当前对象
根据调用验证的方式,您只需将条件
组传递给验证调用:
if(bar.isSth()) {
Set<ConstraintViolation<Bar>> constraintViolations =
validator.validate(bar, Conditional.class);
}
else {
Set<ConstraintViolation<Bar>> constraintViolations =
validator.validate(bar);
}
if(bar.isSth()){
设置约束变量=
validator.validate(bar,Conditional.class);
}
否则{
设置约束条件=
validator.validate(bar);
}
Hi Gunnar这就是我最终的结局。
if(bar.isSth()) {
Set<ConstraintViolation<Bar>> constraintViolations =
validator.validate(bar, Conditional.class);
}
else {
Set<ConstraintViolation<Bar>> constraintViolations =
validator.validate(bar);
}