SpringMVC中@RequestMapping注解的實(shí)現(xiàn)
0. 多個(gè)方法對(duì)應(yīng)同一個(gè)請(qǐng)求
@RequestMapping("/")
public String toIndex(){
return "index";
}
@RequestMapping("/")
public String toIndex2(){
return "index";
}
這種情況是不允許的,會(huì)報(bào)錯(cuò)。

1. 注解的功能
@RequestMapping注解的作用就是將請(qǐng)求地址和處理請(qǐng)求的控制器方法關(guān)聯(lián)起來(lái),建立映射關(guān)系。
SpringMVC接收到指定的請(qǐng)求,就會(huì)找到映射關(guān)系中對(duì)應(yīng)的控制器方法來(lái)處理這個(gè)請(qǐng)求。
2. 注解位置
@RequestMapping注解既可以放在方法上,也可以放在類上。
標(biāo)識(shí)方法:設(shè)置映射的請(qǐng)求路徑的具體信息。
標(biāo)識(shí)類:設(shè)置映射的請(qǐng)求路徑的初始信息。
例如:如果有如下代碼
@RequestMapping("/hello")
@Controller
public class TestRequestMapping {
@RequestMapping("/target")
public String toTarget(){
return "target";
}
}
那么在訪問(wèn)target之前必須加上/hello,否則訪問(wèn)不到target,也就是url為 http://localhost:8080/項(xiàng)目上下文路徑/hello/target。


3. value屬性
- value屬性用于配置映射到控制器方法的請(qǐng)求路徑。
- value屬性是一個(gè)字符串?dāng)?shù)組,表示該控制器方法可以匹配多個(gè)請(qǐng)求地址。如果指定了多個(gè)value值,那么請(qǐng)求時(shí)滿足其中之一即可。
- value屬性必須設(shè)置。
@RequestMapping({"/test1","/test2"})
public String toTestValue(){
return "testValue";
}
<a th:href="@{/test1}" rel="external nofollow" >一個(gè)控制器方法匹配多個(gè)value測(cè)試1</a><br>
<a th:href="@{/test2}" rel="external nofollow" >一個(gè)控制器方法匹配多個(gè)value測(cè)試2</a><br>



4. method屬性
- 通過(guò)請(qǐng)求方式映射控制器方法。
- method屬性是一個(gè)RequestMethod類型數(shù)組,表示該方法可以匹配多個(gè)請(qǐng)求方式。如果指定了多個(gè)method值,那么請(qǐng)求時(shí)滿足其中之一即可。
- 目前瀏覽器只能支持GET和POST方式。
- 在提交表單時(shí),如果指定了GET和POST以外的請(qǐng)求方式,則會(huì)默認(rèn)以GET請(qǐng)求發(fā)送。
- 如果請(qǐng)求地址匹配,但是請(qǐng)求方式不匹配,則會(huì)返回405,請(qǐng)求方式不允許。
- 如果不指定請(qǐng)求方式,則默認(rèn)可以處理所有請(qǐng)求方式。
- 若要發(fā)送PUT和DELETE請(qǐng)求,則需通過(guò)spring提供的過(guò)濾器HiddenHttpMethodFilter。
@RequestMapping(value="/test3",method=RequestMethod.POST)
public String toTestMethod(){
return "testMethod";
}
<a th:href="@{/test3}" rel="external nofollow" >method允許POST請(qǐng)求測(cè)試</a><br>
<form method="POST" th:action="@{/test3}">
username<input name="username" type="text" /><br>
<input type="submit" value="提交" /><br>
</form>
<form method="DELETE" th:action="@{/test3}">
username<input name="username" type="text" /><br>
<input type="submit" value="提交" /><br>
</form>



5. params屬性
- 通過(guò)請(qǐng)求參數(shù)映射控制器方法。
- params屬性是一個(gè)字符串?dāng)?shù)組,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求參數(shù)和控制器映射的關(guān)系。如果指定了多個(gè)請(qǐng)求參數(shù),那么在請(qǐng)求時(shí)需要全部滿足。
- “param”:要求請(qǐng)求參數(shù)必須攜帶名為param的參數(shù),參數(shù)值可以任意。
- “!param”:要求請(qǐng)求參數(shù)中不能含有名為param的參數(shù)。
- “param=value”:要求請(qǐng)求參數(shù)必須含有param且值為value。
- “param!=value”:要求請(qǐng)求參數(shù)必須含有param且值不為value。
- 如果請(qǐng)求匹配了value和method,但是沒有匹配params,會(huì)返回400狀態(tài)碼。
/*這個(gè)注解表示請(qǐng)求參數(shù)要滿足如下要求
1.要有username1,值任意
2.不能有username2
3.要有username3,且值為jack
4.要有username4,且值不能為jack
在寫鍵值對(duì)時(shí),如果value為字符串類型,不需要使用單引號(hào)括起來(lái),否則會(huì)出錯(cuò)
*/
@RequestMapping(value="/test4",params={"username1","!username2","username3=jack","username4!=jack"})
public String toTestParams(){
return "testParams";
}
<!--使用?可以連接請(qǐng)求參數(shù),但是會(huì)標(biāo)紅,所以可以使用括號(hào)來(lái)表示請(qǐng)求參數(shù)-->
<a th:href="@{/test4(username3='jack',username4='asd')}" rel="external nofollow" >Params沒有username1測(cè)試</a><br>
<a th:href="@{/test4(username1='asd',username2='qw',username3='jack',username4='qew')}" rel="external nofollow" >Params有username2測(cè)試</a><br>
<a th:href="@{/test4(username1='dg',username3='asd',username4='oih')}" rel="external nofollow" >Params有username3但值不為jack測(cè)試</a><br>
<a th:href="@{/test4(username1='ih',username3='jack',username4='jack')}" rel="external nofollow" >Params有username4但值為jack測(cè)試</a><br>
<a th:href="@{/test4(username1='asd',username3='jack',username4='xcv')}" rel="external nofollow" >Params參數(shù)滿足條件測(cè)試</a><br>





6. headers屬性
- 通過(guò)請(qǐng)求頭信息來(lái)匹配控制器方法。
- headers屬性是一個(gè)字符串?dāng)?shù)組,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求頭信息和控制器的匹配關(guān)系。如果指定了多個(gè)headers值,需要全部滿足。
- “header”:要求請(qǐng)求頭中必須有header,值任意。
- “!header”:要求請(qǐng)求頭中不能含有名為header的參數(shù)。
- “header=value”:要求請(qǐng)求頭必須含有header且值為value。
- “header!=value”:要求請(qǐng)求頭必須含有header且值不為value。
- 如果請(qǐng)求滿足了value、method和params,但沒有滿足headers屬性,那么就會(huì)返回404狀態(tài)碼。
@RequestMapping(value="/test5",headers = {"Host=localhost:8080","Accept-Encoding!=gzip, deflate, br"})
public String toTestHeaders(){
return "testHeaders";
}
<a th:href="@{/test5}" rel="external nofollow" >Headers不滿足Accept-Encoding條件</a><br>

修改headers屬性后,可以使條件滿足:
@RequestMapping(value="/test5",headers = {"Host=localhost:8080","Accept-Encoding=gzip, deflate, br"})
public String toTestHeaders(){
return "testHeaders";
}

7. ant風(fēng)格的路徑
- ?:表示任意單個(gè)字符。
- *:表示任意0個(gè)或多個(gè)字符。
- **:表示任意的一層或多層目錄。注意在使用時(shí),兩個(gè)星號(hào)必須位于獨(dú)立的一層目錄內(nèi),例如
前綴路徑/**/后綴路徑,前綴和后綴可以沒有,但是兩個(gè)星號(hào)前后或中間不能有任何內(nèi)容。



8. 路徑中的占位符
SpringMVC路徑中的占位符常用于RESTful風(fēng)格中,它允許將參數(shù)作為路徑的一部分發(fā)送給服務(wù)器,而不是以?連接在URL后。該方式傳遞的參數(shù)只能通過(guò)@PathVariable注解的value屬性中的同名變量獲得參數(shù)值。
//大括號(hào)表示占位符
@RequestMapping("/test6/{id}/{username}")
public String toTest(@PathVariable("id")Integer id,@PathVariable("username")String username){
System.out.println("id = "+id+" "+"username = "+username);
return "test";
}

到此這篇關(guān)于SpringMVC中@RequestMapping注解的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringMVC @RequestMapping注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringMVC中的@RequestMapping注解解析
- 詳解SpringMVC中的@RequestMapping注解
- SpringBoot中的@RequestMapping注解的用法示例
- Spring MVC-@RequestMapping注解詳解
- SpringMVC?@RequestMapping注解屬性詳細(xì)介紹
- SpringMVC @RequestMapping注解應(yīng)用方法示例講解
- 詳解SpringBoot中@PostMapping注解的用法
- SpringBoot中@GetMapping注解的使用
- SpringMVC @GetMapping注解路徑?jīng)_突問(wèn)題解決
- Spring中@RequestMapping、@PostMapping、@GetMapping的實(shí)現(xiàn)
相關(guān)文章
詳解SpringBoot與SpringCloud的版本對(duì)應(yīng)詳細(xì)版
這篇文章主要介紹了詳解SpringBoot與SpringCloud的版本對(duì)應(yīng)詳細(xì)版,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
java實(shí)現(xiàn)簡(jiǎn)單銀行家算法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單銀行家算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
SpringBoot淺析緩存機(jī)制之Ehcache?2.x應(yīng)用
EhCache?是一個(gè)純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點(diǎn)。它是Hibernate中的默認(rèn)緩存框架。Ehcache已經(jīng)發(fā)布了3.1版本。但是本文的講解基于2.x版本2022-08-08
淺析springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控
Zipkin是一款開源的分布式實(shí)時(shí)數(shù)據(jù)追蹤系統(tǒng)(Distributed Tracking System),其主要功能是聚集來(lái)自各個(gè)異構(gòu)系統(tǒng)的實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)。這篇文章主要介紹了springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控,需要的朋友可以參考下2019-11-11
logback的使用和logback.xml詳解(小結(jié))
Logback是由log4j創(chuàng)始人設(shè)計(jì)的另一個(gè)開源日志組件,這篇文章主要介紹了logback的使用和logback.xml詳解(小結(jié)),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-11-11
Java SpringMVC數(shù)據(jù)響應(yīng)超詳細(xì)講解
Spring?MVC?是?Spring?提供的一個(gè)基于?MVC?設(shè)計(jì)模式的輕量級(jí)?Web?開發(fā)框架,本質(zhì)上相當(dāng)于?Servlet,Spring?MVC?角色劃分清晰,分工明細(xì),本章來(lái)講解SpringMVC數(shù)據(jù)響應(yīng)2022-04-04
springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程
這篇文章主要介紹了springboot整合curator實(shí)現(xiàn)分布式鎖過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

