Я создал пользовательский 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}
внутри при использовании его в пределах тимелиста и с бобом MessageSource
, однако HibernateConstraintValidatorContext не заменит значение.
Учитывая ограничения моего проекта, я не могу изменить формат сообщения, например, изменив его на The value ${0} is invalid.
.
В настоящее время у меня есть приложение, отображающее ответ «Значение userInput недопустимо» где «userInput» - это имя поля в форме / объекте.