2016-07-31 11 views
1

Ich möchte den Java 8 ReflectionParameterNameProvider Hibernate Validator verwenden, um die richtigen Parameternamen anstelle von .argN, z. getPerson.arg0Benutzerdefinierter Hibernate Validator Spring Boot

ich die Anwendung mit der -parameter Flagge am Kompilieren und habe folgende Bean meinen Kontext hinzugefügt:

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

    return validatorFactory.getValidator(); 
} 

Aber bin immer noch die alten getPerson.arg0

Irgendwelche Ideen bekommen, Dank?

Antwort

1

Wenn Sie sich auf die Integration von Hibernate Validator mit Hibernate verlassen, um die Validierung durchzuführen, musste ich alle meine Konfiguration in validation.xml setzen und Hibernate Validator stattdessen von dieser Konfiguration booten lassen.

Die von Ihnen angegebene Konfiguration funktioniert für springspezifische Dinge, funktioniert aber leider nicht für die Integration in den Hibernate/Hibernate Validator.

+0

Es Sie tun entweder in der Dokumentation kann zu vorschlagen scheint die „ReflectionParameterNameProvider oder anderen benutzerdefinierten Anbieter verwenden entweder eine Instanz des Provider passieren während Bootstrapping, wie in Beispiel 8.8,‚Verwenden eines benutzerdefinierten ParameterNameProvider‘, oder geben Sie vollqualifizierter Klassenname des Anbieters als Wert für das Element in der Datei META-INF/validation.xml " – ptimson

+0

Das dachte ich, aber nicht das, was ich kürzlich in einer eigenen Übung beobachtet habe. – Naros

+0

Ich fand eine Lösung http://stackoverflow.com/questions/38685811/custom-hibernate-validator-spring-boot/38693000#38693000 – ptimson

1

Es herausgefunden, musste nur dies in der Bean methodValidationPostProcessor festlegen.

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; 
}