web-dev-qa-db-ja.com

Spring-Boot javax.validation.Validatorを適切に注入する方法

JSR-303(hibernate-validator)を使用してモデルを検証しようとすると、ValidatorをSpringアプリケーションBeanに挿入する際に問題が発生しました

私の主な構成クラスは次のとおりです。

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

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はクラスパス上にあります。私はそれをリポジトリに注入しようとしています:

@Repository
public class UserRepositoryImpl implements UserRepositoryCustom    {

    @Autowired
    private Validator validator;

スローされる例外:

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

更新:

これの部分的な回避策は、メイン構成クラスでこれを定義することです。

  @Bean
    public Validator validator() {

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

ただし、統合テスト(org.springframework.test.context.web.WebAppConfiguration;注釈と検証ロジックの使用)は失敗します。

39
WeMakeSoftware

次のようなLocalValidatorFactoryBean型のBeanを宣言する必要があります。

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

xMLまたは

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

in Java Config。

これ Springドキュメントの一部にすべての詳細があります

59
geoand