SpringMVC的注解@RequestMapping屬性及使用
SpringMVC注解@RequestMapping
在之前的 hello world 示例中,用到了 @RequestMapping 注解,它的作用就是將請(qǐng)求和處理請(qǐng)求的控制器方法關(guān)聯(lián)起來(lái),建立映射關(guān)系。
當(dāng) SpringMVC 接受到指定的請(qǐng)求,就會(huì)到這個(gè)映射關(guān)系中找到對(duì)應(yīng)控制器方法來(lái)處理這個(gè)請(qǐng)求。
一、@RequestMapping 注解的位置
在示例中,注解是用在了方法上,除此之外,還可以用在類上。
1. 作用在方法
@Controller public class RequestMappingController { @RequestMapping("/testRequestMapping") public String testRequestMapping(){ return "success"; } }
此時(shí)請(qǐng)求映射所映射的請(qǐng)求的請(qǐng)求路徑為:/testRequestMapping。
2. 作用在類
@Controller @RequestMapping("/test") public class RequestMappingController { //此時(shí)請(qǐng)求映射所映射的請(qǐng)求的請(qǐng)求路徑為:/test/testRequestMapping @RequestMapping("/testRequestMapping") public String testRequestMapping(){ return "success"; } }
此時(shí)請(qǐng)求映射所映射的請(qǐng)求的請(qǐng)求路徑為:/test/testRequestMapping。
作用在類上以后會(huì)經(jīng)常用到,比如有2個(gè)模塊:用戶和訂單,那么每個(gè)模塊下都會(huì)有自己的列表接口 /list。
為了更好的通過(guò)名稱區(qū)分出不同模塊,可以給兩個(gè)類上加上注解,使其最終路徑為/user/list、/order/list。
當(dāng)然,你也可以不用類的注解,直接在方法的注解上做區(qū)分,比如/userList和/orderList。
總之,一個(gè)請(qǐng)求只能有一個(gè)控制器來(lái)處理,如果你兩個(gè)不同的控制器方法,都使用/list,那么請(qǐng)求過(guò)來(lái)的時(shí)候就不知道該找哪個(gè)處理,會(huì)報(bào)錯(cuò)。
二、@RequestMapping 注解的 value 屬性
value 屬性通過(guò)請(qǐng)求的請(qǐng)求地址匹配請(qǐng)求映射,是必須設(shè)置的,否則請(qǐng)求地址匹配不到映射。
另外,value 屬性也是一個(gè)字符串類型的數(shù)組,表示該請(qǐng)求映射能夠匹配多個(gè)請(qǐng)求地址的請(qǐng)求。
@Controller public class RequestMappingController { @RequestMapping( value = {"/test1", "/test2"} ) public String testRequestMapping(){ return "success"; } }
這里不管請(qǐng)求地址是/test1還是/test2,都可以找到控制器 testRequestMapping(),返回 success.html 。
三、@RequestMapping 注解的 method 屬性
method屬性通過(guò)請(qǐng)求的請(qǐng)求方式,比如 get 或 post ,來(lái)匹配請(qǐng)求映射。
method 屬性是一個(gè) RequestMethod 類型的數(shù)組,表示該請(qǐng)求映射能夠匹配多種請(qǐng)求方式的請(qǐng)求。
若當(dāng)前請(qǐng)求的請(qǐng)求地址滿足請(qǐng)求映射的 value 屬性,但是請(qǐng)求方式不滿足 method 屬性,比如控制器是設(shè)置是 GET 請(qǐng)求方法,但是請(qǐng)求發(fā)送是 post:
@Controller public class RequestMappingController { @RequestMapping( value = {"/test1"}, method = {RequestMethod.GET} ) public String testRequestMapping(){ return "success"; } }
index.html 添加 post 發(fā)送:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>首頁(yè)</title> </head> <body> <h1>Hello World</h1> <a th:href="@{/target}" rel="external nofollow" >訪問(wèn)目標(biāo)頁(yè)面 target.html </a> <br> <a th:href="@{/test1}" rel="external nofollow" >測(cè)試@RequestMapping的value屬性-->/test1</a><br> <a th:href="@{/test2}" rel="external nofollow" >測(cè)試@RequestMapping的value屬性-->/test2</a><br> <a th:href="@{/test}" rel="external nofollow" >測(cè)試@RequestMapping的method屬性-->/test</a><br> <form th:action="@{/test1}" method="post"> <input type="submit"> </form> </body> </html>
點(diǎn)擊 submit 按鈕,瀏覽器報(bào)錯(cuò)405:Request method 'POST' not supported。
如果繼續(xù)添加 post 方法支持,則可以正常訪問(wèn):
@Controller public class RequestMappingController { @RequestMapping( value = {"/test1"}, method = {RequestMethod.GET, RequestMethod.POST} ) public String testRequestMapping(){ return "success"; } }
@RequestMapping 結(jié)合請(qǐng)求方式的派生注解
對(duì)于處理指定請(qǐng)求方式的控制器方法,SpringMVC 中提供了 @RequestMapping 的派生注解。
- @GetMapping:處理 get 請(qǐng)求的映射
- @PostMapping:處理 post 請(qǐng)求的映射
- @PutMapping:處理 put 請(qǐng)求的映射
- @DeleteMapping:處理 delete 請(qǐng)求的映射
使用這種注解,就不需要設(shè)置 method 屬性了。
@GetMapping("/test3") public String testGetMapping() { return "success"; }
四、@RequestMapping 注解的 params 屬性
最常用的還是上面說(shuō)的 value 和 method 屬性,其他的僅做了解。
params 屬性通過(guò)請(qǐng)求的請(qǐng)求參數(shù)匹配請(qǐng)求映射,是一個(gè)字符串類型的數(shù)組,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求參數(shù)和請(qǐng)求映射的匹配關(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=value
param!=value:要求請(qǐng)求映射所匹配的請(qǐng)求必須攜帶 param 請(qǐng)求參數(shù)但是 param!=value
舉個(gè)例子:
@RequestMapping( value = {"/test1"}, method = {RequestMethod.GET, RequestMethod.POST}, params = {"username", "password!=123456"} ) public String testRequestMapping(){ return "success"; }
這里params = {"username", "password!=123456"}的意思就是,請(qǐng)求中必須帶有參數(shù)username和password,且password參數(shù)的值必須不等于123456。
五、@RequestMapping 注解的 headers 屬性
同樣作個(gè)了解。
headers 屬性通過(guò)請(qǐng)求的請(qǐng)求頭信息匹配請(qǐng)求映射,是一個(gè)字符串類型的數(shù)組,可以通過(guò)四種表達(dá)式設(shè)置請(qǐng)求頭信息和請(qǐng)求映射的匹配關(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
若當(dāng)前請(qǐng)求滿足 @RequestMapping 注解的 value 和 method 屬性,但是不滿足 header 屬性,此時(shí)頁(yè)面顯示404錯(cuò)誤,即資源未找到。
@RequestMapping( value = {"/test1"}, method = {RequestMethod.GET, RequestMethod.POST}, params = {"username", "password!=123456"}, headers = {"Host=localhost:8081"} // 這里端口變成8081 ) public String testRequestMapping(){ return "success"; }
我本地端口是 8080,現(xiàn)在去請(qǐng)求頁(yè)面,會(huì)報(bào)錯(cuò)。
感謝《尚硅谷》的學(xué)習(xí)資源。
以上就是SpringMVC的注解@RequestMapping屬性及使用的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC注解@RequestMapping的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談對(duì)象數(shù)組或list排序及Collections排序原理
下面小編就為大家?guī)?lái)一篇淺談對(duì)象數(shù)組或list排序及Collections排序原理。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09Java中使用開源庫(kù)JSoup解析HTML文件實(shí)例
這篇文章主要介紹了Java中使用開源庫(kù)JSoup解析HTML文件實(shí)例,Jsoup是一個(gè)開源的Java庫(kù),它可以用于處理實(shí)際應(yīng)用中的HTML,比如常見(jiàn)的HTML格式化就可以用它來(lái)實(shí)現(xiàn),需要的朋友可以參考下2014-09-09Spring?Boot中的max-http-header-size配置方式
這篇文章主要介紹了Spring?Boot中的max-http-header-size配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09教你怎么使用Java實(shí)現(xiàn)WebSocket
這篇文章主要介紹了教你怎么使用Java WebSocket,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05Spring中過(guò)濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系解析
在我們?nèi)粘5拈_發(fā)中,我們經(jīng)常會(huì)用到Filter和Interceptor,這篇文章主要介紹了Spring中過(guò)濾器(Filter)和攔截器(Interceptor)的區(qū)別和聯(lián)系?,需要的朋友可以參考下2022-10-10使用Jackson-json解析一個(gè)嵌套的json字符串
這篇文章主要介紹了使用Jackson-json解析一個(gè)嵌套的json字符串,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09java實(shí)現(xiàn)雙色球抽獎(jiǎng)算法
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)雙色球抽獎(jiǎng)算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05postman測(cè)試post請(qǐng)求參數(shù)為json類型的實(shí)例講解
下面小編就為大家分享一篇postman測(cè)試post請(qǐng)求參數(shù)為json類型的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03