是否可以为约束违反模板消息添加消息参数?
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}
的东西)
我有我的自定义 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}
的东西)