2016-07-31 109 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; 
} 
相關問題