Java Spring自定义验证器-使用参数插入消息
我已经创建了一个自定义的Java Spring自定义验证器-使用参数插入消息,java,spring,bean-validation,hibernate-validator,Java,Spring,Bean Validation,Hibernate Validator,我已经创建了一个自定义的ConstraintValidator,其中isValid方法如下所示: private String message; @Override public void initialize(InputValidator constraintAnnotation) { this.message = constraintAnnotation.message(); } @Override public boolean isValid(String inputValue
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.
我可以使用上面的消息,并在thymeleaf中使用时替换中的{0}
值和MessageSource
bean,但是HibernateConstraintValidatorContext不会替换该值
由于项目的限制,我无法更改消息格式,例如将其更改为值${0}无效。
当前,我的应用程序显示响应“值userInput无效”。其中“userInput”是表单/对象中字段的名称。因此{0}
是消息参数,${0}
是表达式变量
您必须使用#addMessageParameter()
而不是#addExpressionVariable()
。它是在Hibernate Validator 5.4.1中引入的,但如果您使用的是较旧的版本,则无论如何都应该升级