webentwicklung-frage-antwort-db.com.de

Spring-Boot So injizieren Sie javax.validation.Validator richtig

Beim Versuch, ein Modell mit JSR-303 (Hibernate-Validator) zu validieren, ist ein Problem beim Injizieren von Validator in die Spring-Application-Bean aufgetreten.

Meine Hauptkonfigurationsklasse ist:

@EnableAutoConfiguration
@EnableWebMvc // <---
@EnableJpaRepositories("com.example")
@EntityScan("com.example")
public class MainConfiguration {

Nach den Javadocs:

/**
 * Provide a custom {@link Validator} instead of the one created by default.
 * The default implementation, assuming JSR-303 is on the classpath, is:
 * {@link org.springframework.validation.beanvalidation.LocalValidatorFactoryBean}.
 * Leave the return value as {@code null} to keep the default.
 */
Validator getValidator();

Die Ruhezustandsüberprüfung befindet sich auf dem Klassenpfad. Ich versuche es in das Repository zu injizieren:

@Repository
public class UserRepositoryImpl implements UserRepositoryCustom    {

    @Autowired
    private Validator validator;

Ausnahme wird geworfen:

 No qualifying bean of type [javax.validation.Validator] found for dependency:

PDATE:

Die teilweise Umgehung hierfür besteht darin, dies in der Hauptkonfigurationsklasse zu definieren:

  @Bean
    public Validator validator() {

        return new org.springframework.validation.beanvalidation.LocalValidatorFactoryBean();
    }

Integrationstests (die Annotation org.springframework.test.context.web.WebAppConfiguration; Und Validierungslogik erfordern) schlagen jedoch fehl.

39
WeMakeSoftware

Sie müssen eine Bean vom Typ LocalValidatorFactoryBean folgendermaßen deklarieren:

<bean id="validator"
    class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>

in XML oder

@Bean
public javax.validation.Validator localValidatorFactoryBean() {
   return new LocalValidatorFactoryBean();
}

in Java Config.

This Ein Teil der Spring-Dokumentation enthält alle Details

59
geoand