Reputation: 343
I am using Hibernate Validator and a MessageSource
to localize violation messages.
class FooValidator implements ConstraintValidator<ValidFoo, Foo>
@Override
public void initialize(ValidTransitions constraintAnnotation) {
}
@Override
public boolean isValid(Foo foo, ConstraintValidatorContext context) {
//some calculations
String result = calculations.toString();
HibernateConstraintValidatorContext hibernateContext = context.unwrap(HibernateConstraintValidatorContext.class);
hibernateContext.disableDefaultConstraintViolation();
hibernateContext.addExpressionVariable("invalidResult", result)
.buildConstraintViolationWithTemplate("Invalid field: ${invalidResult}")
.addConstraintViolation();
return false;
}
}
I want to have something like this in messages.properties
:
ValidFoo.foo=Localized invalid field message, field: ${invalidResult}
But I can't find a way to inject dynamic parameters from my FooValidator
to message property.
Upvotes: 1
Views: 1196
Reputation: 26
Named parameters and expression variables can be resolved only by Hibernate.
Spring uses MessageFormat.
See AbstractMessageSource.getMessageInternal for details.
Upvotes: 1