解決SpringMVC @RequestMapping不設(shè)置value出現(xiàn)的問題
SpringMVC @RequestMapping不設(shè)置value
從上個(gè)項(xiàng)目拷貝過來的form的action屬性忘了修改了
在controller上沒有設(shè)置@RequestMapping,方法上設(shè)置了但忘記設(shè)置value值,沒想到還是能訪問到,弄拙成巧,讓我發(fā)現(xiàn)了這個(gè)問題
本以為會(huì)默認(rèn)按照方法名來訪問,當(dāng)我修改方法名后依然能訪問到
猜想會(huì)以表單字段和參數(shù)列表的對(duì)應(yīng)關(guān)系來訪問,修改后依然能訪問到
因?yàn)槲疫@個(gè)項(xiàng)目所有的controller的命名空間沒有一個(gè)是“account”,所以猜想當(dāng)SpringMVC無法匹配到對(duì)應(yīng)的controller時(shí)會(huì)訪問@RequestMapping沒有配置value的方法, 于是新建一個(gè)Controller類,也是只在方法上配置了一個(gè)沒有設(shè)置value的@RequestMapping,
這時(shí)啟動(dòng)tomcat報(bào)錯(cuò):
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
說明猜想正確,兩個(gè)controller沖突了
后經(jīng)測(cè)試,當(dāng)@RequestMapping設(shè)置method屬性,如一個(gè)方法上設(shè)置為GET,另一個(gè)設(shè)置為POST,http請(qǐng)求的方式不同,不會(huì)沖突,會(huì)找到對(duì)應(yīng)的方法執(zhí)行。
Spring mvc中@RequestMapping 6個(gè)基本用法小結(jié)
小結(jié)下spring mvc中的@RequestMapping的用法
1、最基本的,方法級(jí)別上應(yīng)用
例如:
@RequestMapping(value="/departments") public String simplePattern(){ System.out.println("simplePattern method was called"); return "someResult"; }
則訪問http://localhost/xxxx/departments的時(shí)候,會(huì)調(diào)用 simplePattern方法了
2、參數(shù)綁定
@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風(fēng)格的參數(shù)
@RequestMapping(value="/departments/{departmentId}") public String findDepatment(@PathVariable String departmentId){ System.out.println("Find department with ID: " + departmentId); return "someResult"; }
形如REST風(fēng)格的地址訪問,比如:
/departments/23,其中用(@PathVariable接收rest風(fēng)格的參數(shù)
4、REST風(fēng)格的參數(shù)綁定形式之2
先看例子,這個(gè)有點(diǎn)象之前的:
@RequestMapping(value="/departments/{departmentId}") public String findDepatmentAlternative( @PathVariable("departmentId") String someDepartmentId){ System.out.println("Find department with ID: " + someDepartmentId); return "someResult"; }
這個(gè)有點(diǎn)不同,就是接收形如/departments/23的URL訪問,把23作為傳入的departmetnId,,但是在實(shí)際的方法findDepatmentAlternative中,使用
@PathVariable("departmentId") String someDepartmentId
將其綁定為 someDepartmentId,所以這里someDepartmentId為23
5、url中同時(shí)綁定多個(gè)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"; }
這個(gè)其實(shí)也比較好理解了。
6、支持正則表達(dá)式
@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.
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于QueryWrapper,實(shí)現(xiàn)MybatisPlus多表關(guān)聯(lián)查詢方式
這篇文章主要介紹了關(guān)于QueryWrapper,實(shí)現(xiàn)MybatisPlus多表關(guān)聯(lián)查詢方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。2022-01-01SpringBoot項(xiàng)目War包部署無法注冊(cè)到Nacos中的解決
這篇文章主要介紹了SpringBoot項(xiàng)目War包部署無法注冊(cè)到Nacos中的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01使用jpa的實(shí)體對(duì)象轉(zhuǎn)json符串時(shí)懶加載的問題及解決
這篇文章主要介紹了使用jpa的實(shí)體對(duì)象轉(zhuǎn)json符串時(shí)懶加載的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02Java實(shí)現(xiàn)企業(yè)微信回調(diào)配置的詳細(xì)步驟與測(cè)試
這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)企業(yè)微信回調(diào)配置的詳細(xì)步驟與測(cè)試,企業(yè)微信回調(diào)是指企業(yè)微信通過HTTP?POST請(qǐng)求將業(yè)務(wù)數(shù)據(jù)回調(diào)到指定的URL上,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-09-09解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator)
這篇文章主要介紹了解決springboot生成bean名稱沖突(AnnotationBeanNameGenerator),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Redis Java Lettuce驅(qū)動(dòng)框架原理解析
這篇文章主要介紹了Redis Java Lettuce驅(qū)動(dòng)框架原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12