Spring MVC溫故而知新系列教程之請(qǐng)求映射RequestMapping注解
RequestMapping注解說(shuō)明
@RequestMapping注解的作用將Web請(qǐng)求映射到特定處理程序類和/或處理程序方法,這個(gè)注解可以用于類或者方法上,并通過(guò)屬性value指定請(qǐng)求路徑。用在Controller類上表示提供初步的URL請(qǐng)求映射信息,相對(duì)于Web應(yīng)用的根目錄,這是一個(gè)前置請(qǐng)求路徑。用在Controller中方法上,表示提供詳細(xì)的URL映射。如果Controller類上沒(méi)有加RequestMapping注解,則方法上注解標(biāo)記的URL則是相對(duì)于Web應(yīng)用的根目錄。
@RequestMapping注解提供以下幾個(gè)屬性:
name:用于指定映射器名稱
value:用于指定映射路徑,同path
path:用于指定映射路徑,同value
method:用于指定請(qǐng)求類型:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE
params:指定請(qǐng)求的參數(shù)
headers:指定請(qǐng)求頭部,源碼示例:RequestMapping(value = "/something", headers = "content-type=text/*")
consumes:指定處理請(qǐng)求提交的內(nèi)容類型(Content-Type),例如application/json, text/html,只有在Content-Type匹配這些媒體類型之一時(shí)才會(huì)映射請(qǐng)求
produces:指定請(qǐng)求返回的內(nèi)容類型 例如:produces = "application/json; charset=UTF-8"
通過(guò)value屬性指定映射路徑
Controller類上使用RequestMapping注解
@Controller @RequestMapping("order") public class OrderInfoController { //示例1 @RequestMapping("orderinfo") public ModelAndView OrderInfo1() { return new ModelAndView("order/info", "message", "OrderInfo"); } }
在OrderController類上添加了注解RequestMapping("order"),表示所有對(duì)的請(qǐng)求必須是以“根目錄/order” 開(kāi)始
示例1的請(qǐng)求路徑為:http://localhost:8080/springMvcNext/order/orderinfo
示例1 如果注釋掉Controller上的@RequestMapping("order"),則對(duì)應(yīng)的請(qǐng)求路徑為:http://localhost:8080/springMvcNext /orderinfo
Controller方法上使用RequestMapping注解
1.常用基礎(chǔ)用法
@Controller @RequestMapping("order") public class OrderInfoController { //示例1 @RequestMapping("orderinfo") public ModelAndView OrderInfo1() { return new ModelAndView("order/info", "message", "OrderInfo"); } //示例2 :處理多個(gè)url映射 @RequestMapping({"info","index"}) //或者@RequestMapping(value={"info","index"}) public ModelAndView OrderInfo2() { return new ModelAndView("order/info","message", "OrderInfo2"); } //示例3 @RequestMapping public ModelAndView OrderInfo3() { return new ModelAndView("order/info","message", "OrderInfo3"); } }
RequestMapping只配置value屬性,不顯示配置其他屬性的情況下,value省略,直接填寫(xiě)URL映射信息即可,指定其他屬性的情況下value屬性必須明確填寫(xiě)
上例示例1的訪問(wèn)路徑為: http://localhost:8080/springMvcNext/order/orderinfo
示例2:RequestMapping接口中value屬性是一個(gè)數(shù)組,所有也支持傳一個(gè)數(shù)組 示例2的訪問(wèn)路徑:http://localhost:8080/springMvcNext/order/index 或者 http://localhost:8080/springMvcNext/order/info
示例3:當(dāng)value為空時(shí),表示該方法為類下默認(rèn)的Action,示例3的訪問(wèn)路徑為:http://localhost:8080/springMvcNext/order
2.URL模板映射
在RequestMapping注解中聲明URI變量,并通過(guò)@PathVariable注解的方式訪從實(shí)際請(qǐng)求URL中獲取值,示例如下:
@Controller public class OrderInfoController { // 示例10 帶占位符的URL @RequestMapping(value = "user/{userId}/order/{orderNumber}", method = RequestMethod.GET) public ModelAndView OrderInfo4(@PathVariable int userId,@PathVariable String orderNumber) { return new ModelAndView("order/info", "message", "userid:"+userId+" orderNumber:"+orderNumber); } }
示例10請(qǐng)求URL: http://localhost:8080/springMvcNext/user/12/order/333 當(dāng)通過(guò)此URL發(fā)起請(qǐng)求時(shí),SpringMVC將通過(guò)@PathVariable可以提取URL模板中的{×××}中的×××變量, URL變量會(huì)自動(dòng)轉(zhuǎn)換為對(duì)應(yīng)的類型,無(wú)法轉(zhuǎn)換的則返回錯(cuò)誤,比如嘗試用以下url訪問(wèn):http://localhost:8080/springMvcNext/user/xxx/order/333 其中參數(shù)Userid=xxx,則發(fā)生錯(cuò)誤:
3.Ant風(fēng)格的URL路徑映射
Ant風(fēng)格通配符如下:
- ? 匹配一個(gè)字符
- * 匹配路徑段中的零個(gè)或多個(gè)字符
- ** 匹配零個(gè)或多個(gè)路徑段
示例:
@Controller public class OrderInfoController { // 示例11 帶占位符的URL @RequestMapping(value = "order*", method = RequestMethod.GET) //@RequestMapping(value = "order?", method = RequestMethod.GET) //@RequestMapping(value = "order/**", method = RequestMethod.GET) public ModelAndView OrderInfo5(String orderNumber) { return new ModelAndView("order/info", "message", "OrderInfo5"); } }
示例11請(qǐng)求URL: http://localhost:8080/springMvcNext/order/orderdexx?orderNumber=12 可以匹配http://localhost:8080/springMvcNext/order/orderXXXXX?orderNumber=yyyy的所有請(qǐng)求
@RequestMapping(value = "order?", method = RequestMethod.GET)可以匹配諸如 “…/ordera?orderNumber….” “…/orders?orderNumber….” @RequestMapping(value = "order/**", method = RequestMethod.GET)可以匹配諸如 “…/order/aaa?orderNumber….” “…/order/bbb/ccc?orderNumber….”
另外 RequestMapping還支持正則表達(dá)式風(fēng)格的URL路徑映射,此處略過(guò)
通過(guò)method屬性指定請(qǐng)求類型
RequestMapping提供的method屬性請(qǐng)求謂詞的類型,如下示例示例只接受GET請(qǐng)求
// 示例4 @RequestMapping(value="detail",method=RequestMethod.GET) //也可直接使用 @GetMapping("detail") public ModelAndView Info() { return new ModelAndView("order/info", "message", "Info"); }
對(duì)于每種請(qǐng)求類型,SpringMVC還提供了專用的注解:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
通過(guò)params指定參數(shù)名或參數(shù)值約束
params屬性可以限定請(qǐng)求參數(shù)包含特定的參數(shù),也可限定參數(shù)值的約束,如下代碼所示:
// 示例5 params 限定參數(shù)包含orderNumber @RequestMapping(value = "detail2", params = "orderNumber") public ModelAndView Detail2(String orderNumber) { return new ModelAndView("order/info", "message", orderNumber); } // 示例6 params 限定參數(shù)值 @RequestMapping(value = "detail3", params = "orderNumber!=1222") public ModelAndView Detail3(String orderNumber) { return new ModelAndView("order/info", "message", orderNumber); }
示例5限定請(qǐng)求參數(shù)必須包含參數(shù)orderNumber,如果不包含名為orderNumber的參數(shù),則拒絕訪問(wèn):訪問(wèn)路徑:http://localhost:8080/springMvcNext/order/detail2?orderNumber=12
示例6限定請(qǐng)求參數(shù)必須包含參數(shù)orderNumber并且參數(shù)值不能為1222 訪問(wèn)路徑:http://localhost:8080/springMvcNext/order/detail3?orderNumber=1222 時(shí)報(bào)錯(cuò)
通過(guò)headers指定參數(shù)名或參數(shù)值約束
RequestMapping提供的method屬性可以指定請(qǐng)求頭類型,只有請(qǐng)求數(shù)據(jù)頭部類型符合指定的值時(shí),才能正常訪問(wèn)
// 示例7 params 限定參數(shù)值 @RequestMapping(value = "headtest",headers = "apikey=23131313") //@RequestMapping(value = "headtest",headers= {"Accept=application/json"}) public ModelAndView Header() { return new ModelAndView("order/info", "message", "Header"); }
示例7限定請(qǐng)求頭必須包含apikey:23131313才可以正常返回,直接訪問(wèn),返回錯(cuò)誤:
添加添加header信息apikey:23131313訪問(wèn)成功:
通過(guò)consumes指定請(qǐng)求提交的內(nèi)容類型(Content-Type)
// 示例8 consumes @RequestMapping(value = "consumes", method = RequestMethod.POST, consumes = "application/json") public ModelAndView Consumes(String orderNumber) { return new ModelAndView("order/info", "message", orderNumber); }
示例限定請(qǐng)求參數(shù)類型為application/json,表示該方法只處理請(qǐng)求Content-Type為application/json的請(qǐng)求:
下面通過(guò)拋postman測(cè)試:
設(shè)置請(qǐng)求參數(shù)格式為application/json,可以正常訪問(wèn):
設(shè)置參數(shù)格式為x-form-urlencoded,返回錯(cuò)誤,Http Status 415
通過(guò)produces指定返回的內(nèi)容類型(Content-Type)
produces屬性用于設(shè)定返回內(nèi)容類型,并且滿足以下條件:接受請(qǐng)求header中包含Accept的值與produces設(shè)定的值相同,或者接受的請(qǐng)求使用不顯示設(shè)置accept值
// 示例8 produces 限定返回?cái)?shù)據(jù)application/json @RequestMapping(value = "produces", method = RequestMethod.GET, produces = "application/json") public ModelAndView Produces(String orderNumber) { return new ModelAndView("order/info", "message", orderNumber); }
示例8 表示返回內(nèi)容格式application/json ,當(dāng)客戶端設(shè)置的accept格式為text/json時(shí),運(yùn)行報(bào)錯(cuò),Http status 406
當(dāng)客戶端設(shè)置的accept格式為application/json或者不設(shè)置accept值時(shí),可以正常運(yùn)行
總結(jié)
以上所述是小編給大家介紹的Spring MVC溫故而知新系列教程之請(qǐng)求映射RequestMapping注解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
spring注入在有常量的情況下使用@AllArgsConstructor操作
這篇文章主要介紹了spring注入在有常量的情況下使用@AllArgsConstructor操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java Swing JCheckBox復(fù)選框的實(shí)現(xiàn)方法
這篇文章主要介紹了Java Swing JCheckBox復(fù)選框的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Java中ReentrantLock和ReentrantReadWriteLock的原理
這篇文章主要介紹了Java中ReentrantLock和ReentrantReadWriteLock的原理,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-09-09Java JDBC批量執(zhí)行executeBatch方法詳解
這篇文章主要介紹了Java JDBC批量執(zhí)行executeBatch方法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面(前后端分離)
本文主要介紹了Vue結(jié)合Springboot實(shí)現(xiàn)用戶列表單頁(yè)面,可以實(shí)現(xiàn)簡(jiǎn)單的查詢,刪除,修改,和添加用戶信息功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07Java動(dòng)態(tài)代理實(shí)現(xiàn)方法小結(jié)
這篇文章主要介紹了Java動(dòng)態(tài)代理實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了java基于JDK、CGLIB及CGLIB實(shí)現(xiàn)動(dòng)態(tài)代理的相關(guān)操作技巧,需要的朋友可以參考下2019-02-02Java 文創(chuàng)商城系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+mysql+maven+tomcat實(shí)現(xiàn)一個(gè)文創(chuàng)商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11關(guān)于Mybatis的@param注解及多個(gè)傳參
這篇文章主要介紹了關(guān)于Mybatis的@param注解及多個(gè)傳參,@Param的作用就是給參數(shù)命名,比如在mapper里面某方法A(int id),當(dāng)添加注解后A(@Param(“userId”) int id),也就是說(shuō)外部想要取出傳入的id值,只需要取它的參數(shù)名userId就可以了,需要的朋友可以參考下2023-05-05