- 
                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