詳解SpringMVC中的@RequestMapping注解
前言
我們?cè)趯?shí)際的開發(fā)當(dāng)中,一個(gè)控制器中不一定只有一個(gè)方法,而這些方法都是用來處理請(qǐng)求的,那么怎樣才能將請(qǐng)求與處理方法一一對(duì)應(yīng)呢,當(dāng)然是通過 RequestMapping 注解來處理這些映射請(qǐng)求,也就是通過它來指定控制器可以處理哪些URL請(qǐng)求。
@RequestMapping注解是一個(gè)用來處理請(qǐng)求地址映射的注解,可用于映射一個(gè)請(qǐng)求或一個(gè)方法,可以用在類或方法上。
1.@RequestMapping可以標(biāo)注的位置
1.1 標(biāo)注在方法上
- 用于方法上,表示在類的父路徑下追加方法上注解中的地址將會(huì)訪問到 該方法
@Controller public class RequestMappingController {
@Controller public class RequestMappingController { @RequestMapping("/testRequest") public String testRequest(){ return "success"; } }
此時(shí)請(qǐng)求映射所映射的請(qǐng)求的請(qǐng)求路徑為:////localhost:8080/springmvc_study02/testRequest
注意:springmvc_study02
是項(xiàng)目名稱
1.2 標(biāo)注在類和方法上
- 用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。
@Controller @RequestMapping(“/hello”) public class RequestMappingController { @RequestMapping("/testRequest") public String testRequest(){ return "success"; } }
此時(shí)請(qǐng)求映射所映射的請(qǐng)求的請(qǐng)求路徑為://localhost:8080/springmvc_study02/hello/testRequest
注意:當(dāng)你在類上添加RequestMapping注解后,如果要請(qǐng)求映射,就意味著請(qǐng)求要先映射到標(biāo)注類的位置,然后再映射到該類的方法上。如果不加就會(huì)出現(xiàn)如下錯(cuò)誤
2. @RequestMapping的屬性
- 我們可以先查看一下源碼:按住Ctrl鍵,鼠標(biāo)點(diǎn)擊RequestMapping注解就可以看到下面的界面
- 在源碼中我們可以看到@RequestMapping的所有屬性,那么接下來就一起看一看這些屬性
2.1 @RequestMapping的value屬性*
- @RequestMapping 的 value 屬性必須設(shè)值;
- @RequestMapping 的 value 屬性是通過當(dāng)前請(qǐng)求的請(qǐng)求地址來匹配請(qǐng)求;
- 從上面的源碼中可以看到value屬性是一個(gè)字符串類型的數(shù)組,因此說明可以將多個(gè)請(qǐng)求映射到一個(gè)方法上,只需要給 value 來指定一個(gè)包含多個(gè)路徑的數(shù)組。
設(shè)置value屬性的值:
@Controller public class RequestMappingController { @RequestMapping(value = {"/testRequest","/test"}) public String testRequest(){ return "success"; } }
在瀏覽器中輸入下面路徑進(jìn)行測(cè)試:
注意:從上面兩張圖我們能夠看到,這時(shí)的請(qǐng)求映射所映射的請(qǐng)求的請(qǐng)求路徑為選擇value數(shù)組中的任意一個(gè)都可以。
2.2 @RequestMapping的method屬性*
- @RequestMapping的method屬性是通過當(dāng)前請(qǐng)求的請(qǐng)求方式來匹配請(qǐng)求;
- 瀏覽器向服務(wù)器發(fā)送請(qǐng)求,請(qǐng)求方式有很多GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS、TRACE??梢允褂?method 屬性來約束請(qǐng)求方式。
設(shè)置請(qǐng)求方式為get:
@Controller public class RequestMappingController { @RequestMapping(value = "/testRequest",method = RequestMethod.GET) public String testRequest(){ return "success"; } }
以post方式請(qǐng)求:
<form th:action="@{/testRequest}" method="post"> <input type="submit"> </form>
請(qǐng)求結(jié)果:
注意:我們?cè)贎RequestMapping注解里加一個(gè)方法限定:method = RequestMethod.GET,則請(qǐng)求必須是get的,否則就會(huì)發(fā)生以上的錯(cuò)誤。
映射方法中明確要求請(qǐng)求方式為get,所以post方式不被允許,只有修改為get,才能夠請(qǐng)求成功,如果要想兩種方式都支持,只需在@RequestMapping注解的method屬性中添加另一種方式即可,中間用英文逗號(hào)隔開。
擴(kuò)展:
@GetMapping:處理get方式請(qǐng)求的映射
@PostMapping:處理post方式請(qǐng)求的映射
@PutMapping:處理put方式請(qǐng)求的映射
@DeleteMapping:處理delete方式請(qǐng)求的映射
@GetMapping就相當(dāng)于@RequestMapping(method=RequestMethod.GET),它會(huì)將get映射到特定的方法上。
使用方式:@GetMapping(value = "/testRequest")
2.3 @RequestMapping的params屬性
@RequestMapping的params屬性是通過當(dāng)前請(qǐng)求的請(qǐng)求參數(shù)來匹配請(qǐng)求;
@RequestMapping的params屬性是一個(gè)字符串類型的數(shù)組,可以通過下面四種表達(dá)是來設(shè)置匹配關(guān)系
- “param”:要求請(qǐng)求映射的請(qǐng)求必須為包含 param的請(qǐng)求參數(shù)
- “!param”:要求請(qǐng)求映射的請(qǐng)求是不能包含param的請(qǐng)求參數(shù)
- “param=value”:要求請(qǐng)求映射的請(qǐng)求必須包含 param 的請(qǐng)求參數(shù),且 param 參數(shù)的值必須為 value
- “param!=value”: 要求請(qǐng)求映射的請(qǐng)求是必須包含 param 的請(qǐng)求參數(shù),其值不能為 value。
設(shè)置params的屬性值為username:
@RequestMapping(value = "/test",params = "username") public String test(){ return "success"; }
請(qǐng)求結(jié)果:
注意:我們?cè)O(shè)置了params屬性,就意味著該請(qǐng)求映射的請(qǐng)求必須包含username才能夠請(qǐng)求成功。
當(dāng)我們傳入?yún)?shù)用//localhost:8080/springmvc_study02/test?username
路徑來訪問,我們來看看結(jié)果:
當(dāng)給params屬性設(shè)置多個(gè)屬性值時(shí),必須同時(shí)滿足才能夠請(qǐng)求成功,否則會(huì)出現(xiàn)下面的錯(cuò)誤
2.4 @RequestMapping的headers屬性
@RequestMapping的headers屬性是通過當(dāng)前請(qǐng)求的請(qǐng)求頭信息來匹配請(qǐng)求;
@RequestMapping的headers屬性是一個(gè)字符串類型的數(shù)組,可以通過下面四種表達(dá)是來設(shè)置匹配關(guān)系
- “header”:要求請(qǐng)求映射的請(qǐng)求必須為包含 header的請(qǐng)求頭信息
- “!header”:要求請(qǐng)求映射的請(qǐng)求必須為不包含 header的請(qǐng)求頭信息
- “header=value”:要求請(qǐng)求映射的請(qǐng)求必須為包含 header的請(qǐng)求頭信息,并且header的值必須為value
- “header!=value”:要求請(qǐng)求映射的請(qǐng)求必須為包含 header的請(qǐng)求頭信息,并且header的值必須不是value
設(shè)置請(qǐng)求頭信息:
@RequestMapping(value = "/test",headers = "Host = localhost:8081") public String test(){ return "success"; }
請(qǐng)求結(jié)果:
注意:如果當(dāng)前請(qǐng)求不滿足headers屬性,此時(shí)頁面就會(huì)顯示404錯(cuò)誤,即資源未找到。
到此這篇關(guān)于詳解SpringMVC中的@RequestMapping注解的文章就介紹到這了,更多相關(guān)SpringMVC的@RequestMapping注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringMVC中@RequestMapping注解的實(shí)現(xiàn)
- SpringMVC中的@RequestMapping注解解析
- SpringBoot中的@RequestMapping注解的用法示例
- Spring MVC-@RequestMapping注解詳解
- SpringMVC?@RequestMapping注解屬性詳細(xì)介紹
- SpringMVC @RequestMapping注解應(yīng)用方法示例講解
- 詳解SpringBoot中@PostMapping注解的用法
- SpringBoot中@GetMapping注解的使用
- SpringMVC @GetMapping注解路徑?jīng)_突問題解決
- Spring中@RequestMapping、@PostMapping、@GetMapping的實(shí)現(xiàn)
相關(guān)文章
Mybatis動(dòng)態(tài)sql中@Param使用詳解
這篇文章主要介紹了Mybatis動(dòng)態(tài)sql中@Param使用詳解,當(dāng)方法的參數(shù)為非自定義pojo類型,且使用了動(dòng)態(tài)sql,那么就需要在參數(shù)前加上@Param注解,需要的朋友可以參考下2023-10-10Spring的@Value注入復(fù)雜類型(通過@value注入自定義類型)
Spring的@Value可以注入復(fù)雜類型嗎?今天教你通過@value注入自定義類型。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12@JsonProperty和@JSONField注解的區(qū)別解析(最新)
Jackson是一款優(yōu)秀的JSON解析庫,添加了依賴之后就可以使用對(duì)應(yīng)的注解,讓我們能夠自由的將Java對(duì)象和JSON做轉(zhuǎn)換,這篇文章主要介紹了@JsonProperty和@JSONField注解的區(qū)別,需要的朋友可以參考下2024-04-04Serializable接口的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了java中Serializable接口的作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05從0構(gòu)建Oauth2Server服務(wù)之Refreshing-access-tokens
這篇文章主要為大家介紹了從0構(gòu)建Oauth2Server服務(wù)之Refreshing-access-tokens刷新令牌示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05