Подтвердить что ты не робот

Spring -Boot Как правильно вставить javax.validation.Validator

У меня возникла проблема с введением Validator в приложение spring bean при попытке проверить модель с помощью JSR-303 (hibernate-validator)

Мой основной класс конфигурации:

@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:

UPDATE:

Частичная обработка для этого заключается в определении этого в основном классе конфигурации:

  @Bean
    public Validator validator() {

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

Но тесты интеграции (те, которые требуют org.springframework.test.context.web.WebAppConfiguration; аннотации и использования логики проверки), терпят неудачу.

4b9b3361

Ответ 1

Вам нужно объявить bean типа LocalValidatorFactoryBean следующим образом:

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

в XML или

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

в конфигурации Java.

В этой части документации Spring есть все подробности