#java #spring #bean-validation #spring-validator
#java #spring #bean-проверка #spring-валидатор
Вопрос:
Я следовал инструкциям в документации Spring 4.0.5 для настройки проверки компонентов в контейнере с помощью Hibernate Validator 5.1 и этого (Groovy) класса конфигурации:
@Configuration("validationConfig")
@Import(CreatorConfig)
@ImportResource("/META-INF/spring/mockito-mocks.xml")
static class Config {
@Bean
validator() {
new LocalValidatorFactoryBean()
}
@Bean
mvpp() {
new MethodValidationPostProcessor()
}
}
Мой тестируемый класс создается в ссылочном CreatorConfig
классе:
@Configuration
@DependsOn("validationConfig")
static class CreatorConfig {
@Bean
ticketCreator(TicketRepository tickets) {
new UploadTicketCreator(tickets)
}
}
Я выделил это в отдельный класс конфигурации, полагая, что мне нужен зарегистрированный постпроцессор перед созданием UploadTicketCreator
компонента, который аннотируется в соответствии с документацией:
@Validated
public class UploadTicketCreator {
public UploadTicket createTicket(@Valid CreateTicketRequest request) {
// do stuff
}
}
Затем я внедряю UploadTicketCreator
его в тестовый пример. Я проверил, что автозапуск работает правильно (поле заполнено, а его собственное tickets
поле является макетом Mockito). Однако логика проверки не применяется к моему компоненту creator, а введенный компонент является необработанным POJO без какого-либо прокси.
Я пропустил часть настройки проверки? Есть ли дополнительный требуемый шаг, не упомянутый в документации?
Комментарии:
1. Содержит ли журнал какую-либо информацию о том, что происходит с
MethodValidationPostProcessor
?
Ответ №1:
Похоже, что процессор конфигурации Spring проверяет объявленный возвращаемый тип объявлений bean. Я использовал неявный возвращаемый тип Groovy, который, предположительно, был скомпилирован Object
, и добавил явный возвращаемый тип MethodValidationPostProcessor
или даже BeanPostProcessor
вызвал применение рекомендаций по проверке.