web-dev-qa-db-fra.com

Spring-Boot Comment injecter correctement javax.validation.Validator

J'ai un problème pour injecter le Validator dans le bean d'application Spring lors de la tentative de validation d'un modèle à l'aide de JSR-303 (hibernate-validator)

Ma classe de configuration principale est:

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

Selon les 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();

Hibernate-validator est sur le chemin de classe. J'essaie de l'injecter dans le référentiel:

@Repository
public class UserRepositoryImpl implements UserRepositoryCustom    {

    @Autowired
    private Validator validator;

Exception levée:

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

MISE À JOUR:

La solution partielle consiste à définir cela dans la classe de configuration principale:

  @Bean
    public Validator validator() {

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

Mais les tests d'intégration (ceux qui nécessitent org.springframework.test.context.web.WebAppConfiguration; annotation et utilisation de la logique de validation) échouent.

39
WeMakeSoftware

Vous devez déclarer un bean de type LocalValidatorFactoryBean comme ceci:

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

en XML ou

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

dans Java Config.

This une partie de la documentation Spring contient tous les détails

59
geoand