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;
注釈と検証ロジックの使用)は失敗します。
次のような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ドキュメントの一部にすべての詳細があります