Validación de Java Bean en Spring MVC Controller PathVariables

Estoy intentando que las annotations de validation de Java Bean funcionen con variables de ruta y parameters de consulta en el controller Spring MVC. (Entorno: Spring Boot v1.3.5, Springxxx 4.2.6, lenguaje de progtwigción Kotlin 1.0.3)

p.ej

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

He agregado org.springframework.validation.beanvalidation.MethodValidationPostProcessor como se describe en https://raymondhlee.wordpress.com/2015/08/29/validating-spring-mvc-request-mapping-method-parameters/ y también agregué org. springframework.validation.beanvalidation.LocalValidatorFactoryBean como validatorFactory a lo anterior.

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

}

Pero cuando anoto la class Controller (o la interfaz que implementa) con org.springframework.validation.annotation. Validado como sugerido, parece que la class de controller está proxiada (lo que parece ser el esperado – https://github.com/spring -projects / spring-security / issues / 3215 ).

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

Pero esto hace que la configuration de mapeo de requestes de Spring mvc haga caso omiso de SomeController. La debugging a través del código del marco de Spring parecía org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods () pasa por la list de beans e intenta detectar los methods del manejador, pero el controller anterior se ignora por el aspecto que tiene cuando encuentra un instancia proxy y no lleva las annotations @Controller o @RequestMapping.

¿Alguien tiene alguna idea de lo que falta? Parece que hay mucha información que parece sugerir que esto debería ser posible, pero no se pudo encontrar un ejemplo de trabajo.

Bueno, encontré el problema: fue porque el proxy creado para el controller era un proxy dynamic JDK. Cuando lo obligué a ser un proxy CGLIB, comenzó a funcionar bien.

Por defecto, las classs de Kotlin son definitivas y, por lo tanto, están obligadas a utilizar proxies dynamics JDK, pero marcar el controller como 'abierto' no fue suficiente para obligarlo a usar CGLIB. Tuve que agregar @Scope (proxyMode = ScopedProxyMode.TARGET_CLASS) a la class de controller

 @RestController @RequestMapping("/somepath") @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS) class SomeController ......: SomeResource .... 
  • ¿No se necesita NotNull en Kotlin?
  • Spring Boot .mustache Extensión de file
  • use kotlin para springmvc No se pudo crear una instancia de la class de datos de la class bean
  • Seguridad de spring. Página de inicio de session multilenguaje basada en url
  • Exception Handler no funciona con `spring-boot-starter-data-rest`
  • Integración de HTML y CSS con Kotlin y Spring MVC
  • kotlin y @Valid Spring anotación
  • SpringMVC RequestMapping: Añadiendo .xml a la ruta del controller para la respuesta xml
  • Probar los methods @Async de devolución de vacío de Testing
  • No se puede conectar a Remote Mongo DB mediante Springboot
  • cómo cargar config en spring-webflux sin spring-boot?