Проверка Java bean в Spring MVC Controller PathVariables

Я пытаюсь получить аннотации проверки Java Bean для работы с переменными пути и параметрами запроса в Spring MVC-контроллере. (Среда: Spring Boot v1.3.5, Springxxx 4.2.6, язык программирования Kotlin 1.0.3)

например

@RequestMapping(value = "/{someId}" ...) fun getSomething(**@SomeValidId** @PathVariable("someId") someId: String):... 

Я добавил org.springframework.validation.beanvalidation.MethodValidationPostProcessor, как описано в https://raymondhlee.wordpress.com/2015/08/29/validating-spring-mvc-request-mapping-method-parameters/, а также добавил org. springframework.validation.beanvalidation.LocalValidatorFactoryBean как validatorFactory для вышеперечисленного.

 @Configuration ...class .... { ... @Bean open fun localValidatorFactoryBean() = LocalValidatorFactoryBean() @Bean open fun methodValidationPostProcessor() : MethodValidationPostProcessor { val methodValidationPostProcessor = MethodValidationPostProcessor() methodValidationPostProcessor.setValidator(localValidatorFactoryBean()) return methodValidationPostProcessor } 

}

Но когда я комментирую класс Controller (или интерфейс, который он реализует) с помощью org.springframework.validation.annotation.Validated, как было предложено, выглядит так, как класс контроллера проксирован (что кажется ожидаемым – https://github.com/spring -проекты / весна-безопасность / вопросы / 3215 ).

 @Validated interface SomeResource { .... @RestController @RequestMapping("/somepath") class SomeController ......: SomeResource .... 

Но это приводит к тому, что настройка сопоставления запросов mvc Spring игнорирует SomeController. Отладка через код среды Spring выглядела как org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods () просматривает список компонентов и пытается определить методы обработчика, но вышеупомянутый контроллер игнорируется внешними взглядами, поскольку он встречает proxy, и он не несет аннотации @Controller или @RequestMapping.

Кто-нибудь знает, чего не хватает? Кажется, есть много информации, которая, кажется, предполагает, что это должно быть возможно, но не может найти рабочий пример.

    Ну, я нашел проблему – это было потому, что прокси-сервер, созданный для контроллера, был динамическим прокси-сервером JDK. Когда я заставил его быть прокси-сервером CGLIB, он начал работать нормально.

    По умолчанию классы Kotlin являются окончательными и поэтому вынуждены использовать JDK Dynamic proxy, но маркировка контроллера как «открытого» была недостаточной, чтобы принудить его использовать CGLIB. Пришлось добавить @Scope (proxyMode = ScopedProxyMode.TARGET_CLASS) в класс контроллера

     @RestController @RequestMapping("/somepath") @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) class SomeController ......: SomeResource ....