Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom Hibernate Validator Spring Boot

I wish to use the Java 8 ReflectionParameterNameProvider Hibernate Validator to return proper parameter names instead of .argN e.g. getPerson.arg0

I am compiling the application with the -parameter flag and have added the following Bean to my context:

@Bean
public javax.validation.Validator validator() {
    ValidatorFactory validatorFactory = Validation.byDefaultProvider()
        .configure()
        .parameterNameProvider(new ReflectionParameterNameProvider())
        .buildValidatorFactory();

    return validatorFactory.getValidator();
}

But am still getting the old getPerson.arg0

Any ideas, Thanks?

like image 941
ptimson Avatar asked Jul 02 '26 18:07

ptimson


2 Answers

Figured it out, just had to set this in the methodValidationPostProcessor bean.

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;


@Bean
public Validator validator() {
    final ValidatorFactory validatorFactory = Validation.byDefaultProvider()
            .configure()
            .parameterNameProvider(new ReflectionParameterNameProvider())
            .buildValidatorFactory();
    return validatorFactory.getValidator();
}

@Bean
public MethodValidationPostProcessor methodValidationPostProcessor() {
    final MethodValidationPostProcessor methodValidationPostProcessor = new MethodValidationPostProcessor();
    methodValidationPostProcessor.setValidator(validator());
    return methodValidationPostProcessor;
}
like image 54
ptimson Avatar answered Jul 04 '26 07:07

ptimson


If you are relying on Hibernate Validator's integration with Hibernate to perform the validation, I found that it was necessary to put all my configuration inside validation.xml and let Hibernate Validator bootstrap from that configuration instead.

The configuration you've specified will work for spring-specific things, but won't work for the Hibernate/Hibernate Validator integration unfortunately.

like image 34
Naros Avatar answered Jul 04 '26 08:07

Naros