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