是否可以为约束违规模板消息添加消息参数?

Ore*_*est 1 hibernate-validator javax

我有我的自定义validator,我想为它添加一些错误消息.所以我有下一个代码:

@Override
public boolean isValid(final String label,
                       final ConstraintValidatorContext constraintValidatorContext) {
     constraintValidatorContext.disableDefaultConstraintViolation();

     if(label.length() > MAX_LENGTH) {
          constraintValidatorContext
                  .buildConstraintViolationWithTemplate("{error.maxLength}")
                  .addConstraintViolation();
          return false;
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

我的消息看起来像error.maxLength=You have exceeded max length of {0},所以它有参数maxLength.

在构建约束违规时可以添加它吗?

Gui*_*met 6

是的你可以.

你需要解开ConstraintValidatorContext一个HibernateConstraintValidatorContext:

HibernateConstraintValidatorContext hibernateConstraintValidatorContext = constraintValidatorContext.unwrap( HibernateConstraintValidatorContext.class );
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用:

hibernateConstraintValidatorContext.addMessageParameter("name", value);
Run Code Online (Sandbox Code Playgroud)

(你的看起来像一个消息参数({variable})所以它可能是你必须使用的 - 注意你需要HV 5.4.1.Final来拥有这个方法)

要么

hibernateConstraintValidatorContext.addExpressionVariable("name", value);
Run Code Online (Sandbox Code Playgroud)

如果它是一个表达式变量(所以使用表达式语言等${variable})