Bean Validation Message with dynamic parameter

bean-validation, jakarta-ee, message, validation

Solution

When working with Hibernate Validator >= 4.2 you can reference the validated value via `${validatedValue}` in your messages (in Bean Validation 1.1 that's standardized in the spec):

cpf.validation.message=Cpf ${validatedValue} é inválido

Btw. Hibernate Validator already comes with a `@CPF` constraint, you can find out more in the reference guide. Would be very glad to hear about how that works for you.

Problem

I am getting started with bean validation, and I'm trying to compose a constraint. My constraint is to validate a CPF(personal document in Brazil). My constraint is working, but I need the message to contain a dynamic parameter. I'm using ValidationMessages.properties. My code: ``` @Constraint(validatedBy=CpfValidator.class) @Size(min=11, max=14) @Documented @Target({ElementType.FIELD,ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) public @interface Cpf { String message() default "{cpf.validation.message}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } ``` My ValidationMessages.properties: ``` cpf.validation.message=Cpf {cpf} é inválido ``` My Validator: i'm using a context.buildConstraintViolationWithTemplate to customiza my message. ``` @Override public boolean isValid(String value, ConstraintValidatorContext context) { String cpf = value; boolean result = ValidationUtil.validaCpf(cpf); if (result) { return true; } context.disableDefaultConstraintViolation(); context.buildConstraintViolationWithTemplate("pf.validation.message}") .addConstraintViolation(); return false; } ``` How can I pass the validated value(cpf) by parameter when the message is created?

Original source