天天看點

SpringMVC @RequestMapping不設定value出現的問題

● 從上個項目拷貝過來的form的action屬性忘了修改了,在controller上沒有設定@RequestMapping,方法上設定了但忘記設定value值,沒想到還是能通路到,弄拙成巧,讓我發現了這個問題

SpringMVC @RequestMapping不設定value出現的問題
SpringMVC @RequestMapping不設定value出現的問題

● 本以為會預設按照方法名來通路,當我修改方法名後依然能通路到

● 猜想會以表單字段和參數清單的對應關系來通路,修改後依然能通路到

● 因為我這個項目所有的controller的命名空間沒有一個是“account”,是以猜想當SpringMVC無法比對到對應的controller時會通路@RequestMapping沒有配置value的方法, 于是建立一個Controller類,也是隻在方法上配置了一個沒有設定value的@RequestMapping,

SpringMVC @RequestMapping不設定value出現的問題

 這時啟動tomcat報錯:

Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'testController' bean method 
public java.lang.String com.ld.controller.TestController.login(java.lang.String,java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest)
to {[]}: There is already 'loginController' bean method
public java.lang.String com.ld.controller.LoginController.login(java.lang.String,java.lang.String,java.lang.String,javax.servlet.http.HttpServletRequest) mapped.
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.registerHandlerMethod(AbstractHandlerMethodMapping.java:212)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.detectHandlerMethods(AbstractHandlerMethodMapping.java:184)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.initHandlerMethods(AbstractHandlerMethodMapping.java:144)
	at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.afterPropertiesSet(AbstractHandlerMethodMapping.java:123)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping.afterPropertiesSet(RequestMappingHandlerMapping.java:126)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
	... 36 more
           

說明猜想正确,兩個controller沖突了

後經測試,當@RequestMapping設定method屬性,如一個方法上設定為GET,另一個設定為POST,http請求的方式不同,不會沖突,會找到對應的方法執行

繼續閱讀