-
Notifications
You must be signed in to change notification settings - Fork 38.8k
Closed as not planned
Closed as not planned
Copy link
Labels
for: external-projectNeeds a fix in external projectNeeds a fix in external projectstatus: invalidAn issue that we don't feel is validAn issue that we don't feel is valid
Description
Consider an application:
@SpringBootApplication
@EnableWebMvc
public class DemoApiVersioningApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApiVersioningApplication.class, args);
}
}spring.application.name=demo-api-versioning
spring.mvc.apiversion.use.header=X-Api-Version
spring.mvc.apiversion.supported=1.0
spring.mvc.apiversion.detect-supported=false
spring.mvc.apiversion.required=true@RestController
@RequestMapping("/api/client")
class ClientController {
@GetMapping(value = "find/{id}", version = "1.0")
public ResponseEntity<Client> getClient1(@PathVariable("id") Long id) {
//return client instance
}
@GetMapping(value = "find/{id}", version = "2.0")
public ResponseEntity<Client> getClient2(@PathVariable Long id) {
//return client instance
}
}The application in this configuration fails on startup with the error. The stacktrace below.
However, if we use WebMvcConfigurer instead, the startup goes well. Removing @EnableWebMvc also helps. I'd expect that configuration via properties and config class should work the same.
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
ERROR SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invalid mapping on handler class [com.jetbrains.test.demoapiversioning.client.ClientController]: public org.springframework.http.ResponseEntity com.jetbrains.test.demoapiversioning.client.ClientController.getClient1(java.lang.Long)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1818)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:604)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:526)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1208)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1174)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1110)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:979)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:619)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:748)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:437)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1357)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1346)
at com.jetbrains.test.demoapiversioning.DemoApiVersioningApplication.main(DemoApiVersioningApplication.java:12)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:565)
at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:52)
Caused by: java.lang.IllegalStateException: Invalid mapping on handler class [com.jetbrains.test.demoapiversioning.client.ClientController]: public org.springframework.http.ResponseEntity com.jetbrains.test.demoapiversioning.client.ClientController.getClient1(java.lang.Long)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$0(AbstractHandlerMethodMapping.java:283)
at org.springframework.core.MethodIntrospector.lambda$selectMethods$0(MethodIntrospector.java:76)
at org.springframework.util.ReflectionUtils.doWithMethods(ReflectionUtils.java:366)
at org.springframework.core.MethodIntrospector.selectMethods(MethodIntrospector.java:74)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:276)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.processCandidateBean(AbstractHandlerMethodMapping.java:261)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:220)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:208)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:154)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1865)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1814)
... 21 common frames omitted
Caused by: java.lang.IllegalStateException: API version specified, but no ApiVersionStrategy configured
at org.springframework.util.Assert.state(Assert.java:80)
at org.springframework.web.servlet.mvc.method.RequestMappingInfo$DefaultBuilder.build(RequestMappingInfo.java:773)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.createRequestMappingInfo(RequestMappingHandlerMapping.java:339)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.createRequestMappingInfo(RequestMappingHandlerMapping.java:243)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getMappingForMethod(RequestMappingHandlerMapping.java:193)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.getMappingForMethod(RequestMappingHandlerMapping.java:76)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lambda$detectHandlerMethods$0(AbstractHandlerMethodMapping.java:279)
... 31 common frames omitted
Metadata
Metadata
Assignees
Labels
for: external-projectNeeds a fix in external projectNeeds a fix in external projectstatus: invalidAn issue that we don't feel is validAn issue that we don't feel is valid