Bean validation message with dynamic parameters
I started using bean validation, and I'm trying to build constraints My constraint is to verify CPF (personal file in Brazil) My constraint is valid, but I need the message to contain dynamic parameters
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 context Buildconstraintviolationwithtemplate customize 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 do I pass a validation value (CPF) through a parameter when creating a message?
Solution
When using hibernate validator > = 4.2, you can validate the value through ${validatedvalue} reference in the message (in bean validation 1.1 standardized in the specification):
cpf.validation.message=Cpf ${validatedValue} é inválido
By the way Hibernate validator has attached @ CPF constraint. You can find more information in reference guide I'm glad to hear that it works for you