我创建了一个自定义ConstraintValidator
,其中isValid
方法如下:
private String message;
@Override
public void initialize(InputValidator constraintAnnotation) {
this.message = constraintAnnotation.message();
}
@Override
public boolean isValid(String inputValue, ConstraintValidatorContext context) {
HibernateConstraintValidatorContext h = context.unwrap(HibernateConstraintValidatorContext.class);
h.disableDefaultConstraintViolation();
//logic goes here
if(!valid) {
h.addExpressionVariable("0", inputValue);
h.buildConstraintViolationWithTemplate(this.message)
.addConstraintViolation();
}
return valid;
}
在messages.properties
中我还有以下内容:
error.input=The value {0} is invalid.
我可以使用以上消息,并在百里香叶中用{0}
bean替换MessageSource
值,但是HibernateConstraintValidatorContext不会替换该值。
鉴于我的项目的限制,我无法更改消息格式,例如将其更改为The value ${0} is invalid.
。
我当前有显示响应“值userInput无效”的应用程序。其中“ userInput”是表单/对象中字段的名称。
答案 0 :(得分:1)
因此{0}
是一个消息参数,而${0}
是一个表达式变量。
您必须使用#addMessageParameter()
而不是#addExpressionVariable()
。它是在Hibernate Validator 5.4.1中引入的,但是如果您使用的是旧版本,则仍应进行升级。