Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ConstraintValidatorContext上设置插值模板和消息模板_Java_Bean Validation - Fatal编程技术网

Java 在ConstraintValidatorContext上设置插值模板和消息模板

Java 在ConstraintValidatorContext上设置插值模板和消息模板,java,bean-validation,Java,Bean Validation,我需要从自定义验证器调用validator.validateProperty(),并寻找将messageTemplate和插值消息传递给ConstraintValidatorContext的方法。 我想要实现的是,如果给定的属性有一个特定的值,则会对另一个属性进行火验证 MyCustomClassLevelValidator implements ConstraintValidator<Foo, Bar>{ @Autowired private Validator 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 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);
}