解決SpringMVC @RequestMapping不設置value出現的問題
SpringMVC @RequestMapping不設置value
從上個項目拷貝過來的form的action屬性忘了修改了
在controller上沒有設置@RequestMapping,方法上設置了但忘記設置value值,沒想到還是能訪問到,弄拙成巧,讓我發(fā)現了這個問題


本以為會默認按照方法名來訪問,當我修改方法名后依然能訪問到
猜想會以表單字段和參數列表的對應關系來訪問,修改后依然能訪問到
因為我這個項目所有的controller的命名空間沒有一個是“account”,所以猜想當SpringMVC無法匹配到對應的controller時會訪問@RequestMapping沒有配置value的方法, 于是新建一個Controller類,也是只在方法上配置了一個沒有設置value的@RequestMapping,

這時啟動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請求的方式不同,不會沖突,會找到對應的方法執(zhí)行。
Spring mvc中@RequestMapping 6個基本用法小結
小結下spring mvc中的@RequestMapping的用法
1、最基本的,方法級別上應用
例如:
@RequestMapping(value="/departments")
public String simplePattern(){
System.out.println("simplePattern method was called");
return "someResult";
}
則訪問http://localhost/xxxx/departments的時候,會調用 simplePattern方法了
2、參數綁定
@RequestMapping(value="/departments")
public String findDepatment(
@RequestParam("departmentId") String departmentId){
System.out.println("Find department with ID: " + departmentId);
return "someResult";
}
形如這樣的訪問形式:
/departments?departmentId=23就可以觸發(fā)訪問findDepatment方法了
3、REST風格的參數
@RequestMapping(value="/departments/{departmentId}")
public String findDepatment(@PathVariable String departmentId){
System.out.println("Find department with ID: " + departmentId);
return "someResult";
}
形如REST風格的地址訪問,比如:
/departments/23,其中用(@PathVariable接收rest風格的參數
4、REST風格的參數綁定形式之2
先看例子,這個有點象之前的:
@RequestMapping(value="/departments/{departmentId}")
public String findDepatmentAlternative(
@PathVariable("departmentId") String someDepartmentId){
System.out.println("Find department with ID: " + someDepartmentId);
return "someResult";
}
這個有點不同,就是接收形如/departments/23的URL訪問,把23作為傳入的departmetnId,,但是在實際的方法findDepatmentAlternative中,使用
@PathVariable("departmentId") String someDepartmentId
將其綁定為 someDepartmentId,所以這里someDepartmentId為23
5、url中同時綁定多個id
@RequestMapping(value="/departments/{departmentId}/employees/{employeeId}")
public String findEmployee(
@PathVariable String departmentId,
@PathVariable String employeeId){
System.out.println("Find employee with ID: " + employeeId +
" from department: " + departmentId);
return "someResult";
}
這個其實也比較好理解了。
6、支持正則表達式
@RequestMapping(value="/{textualPart:[a-z-]+}.{numericPart:[\\d]+}")
public String regularExpression(
@PathVariable String textualPart,
@PathVariable String numericPart){
System.out.println("Textual part: " + textualPart +
", numeric part: " + numericPart);
return "someResult";
}
比如如下的URL:/sometext.123,則輸出:
Textual part: sometext, numeric part: 123.
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
關于QueryWrapper,實現MybatisPlus多表關聯查詢方式
這篇文章主要介紹了關于QueryWrapper,實現MybatisPlus多表關聯查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01
SpringBoot項目War包部署無法注冊到Nacos中的解決
這篇文章主要介紹了SpringBoot項目War包部署無法注冊到Nacos中的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator)
這篇文章主要介紹了解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

