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

Is it possible to add message parameter for constraint violation template message?

我有我的自定义 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;
     }
     ...
}

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

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

是的,你可以。

您必须使用以下命令将 ConstraintValidatorContext 解包为 HibernateConstraintValidatorContext

HibernateConstraintValidatorContext hibernateConstraintValidatorContext = constraintValidatorContext.unwrap( HibernateConstraintValidatorContext.class );

然后,您可以使用:

hibernateConstraintValidatorContext.addMessageParameter("name", value);

(你的看起来像一个消息参数({variable})所以它可能是你必须使用的 - 请注意你需要 HV 5.4。1.Final 才能使用此方法)

hibernateConstraintValidatorContext.addExpressionVariable("name", value);

如果它是一个表达式变量(所以使用表达式语言和类似 ${variable} 的东西)