gorodkovskaya
gorodkovskaya

Reputation: 343

Dynamic expression variables for validation messages in Spring MessageSource

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

Answers (1)

Ilya Ovechkin
Ilya Ovechkin

Reputation: 26

Named parameters and expression variables can be resolved only by Hibernate.

Spring uses MessageFormat.

See AbstractMessageSource.getMessageInternal for details.

Upvotes: 1

Related Questions