2016-07-31 77 views
1

我希望使用Java 8 ReflectionParameterNameProvider Hibernate Validator来返回适当的参数名称而不是.argN例如, getPerson.arg0Custom Hibernate Validator Spring Boot

我编译与-parameter标志的申请,并已增加了以下豆到我的上下文:

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

    return validatorFactory.getValidator(); 
} 

,但我仍然得到旧getPerson.arg0

任何想法,谢谢?

回答

1

如果您依赖Hibernate Validator与Hibernate进行集成来执行验证,那么我发现有必要将我的所有配置放在validation.xml之内,并让Hibernate Validator从该配置引导。

您指定的配置将适用于特定于Spring的事物,但不幸的是,它不适用于Hibernate/Hibernate验证器集成。

+0

这似乎表明,你可以做任何的文件“要使用ReflectionParameterNameProvider或其他自定义提供任何自举如例8.8,在此期间通过供应商的实例‘使用自定义ParameterNameProvider’,或指定的META-INF/validation.xml文件中的元素的值的提供程序的完全限定类名“ – ptimson

+0

这就是我认为的,但不是我最近在自己的练习中观察到的。 – Naros

+0

我找到了解决方案http://stackoverflow.com/questions/38685811/custom-hibernate-validator-spring-boot/38693000#38693000 – ptimson

1

想通了,只需要在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; 
} 
相关问题