Spring MVC溫故而知新系列教程之請求映射RequestMapping注解
RequestMapping注解說明
@RequestMapping注解的作用將Web請求映射到特定處理程序類和/或處理程序方法,這個注解可以用于類或者方法上,并通過屬性value指定請求路徑。用在Controller類上表示提供初步的URL請求映射信息,相對于Web應(yīng)用的根目錄,這是一個前置請求路徑。用在Controller中方法上,表示提供詳細(xì)的URL映射。如果Controller類上沒有加RequestMapping注解,則方法上注解標(biāo)記的URL則是相對于Web應(yīng)用的根目錄。
@RequestMapping注解提供以下幾個屬性:
name:用于指定映射器名稱
value:用于指定映射路徑,同path
path:用于指定映射路徑,同value
method:用于指定請求類型:GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE
params:指定請求的參數(shù)
headers:指定請求頭部,源碼示例:RequestMapping(value = "/something", headers = "content-type=text/*")
consumes:指定處理請求提交的內(nèi)容類型(Content-Type),例如application/json, text/html,只有在Content-Type匹配這些媒體類型之一時才會映射請求
produces:指定請求返回的內(nèi)容類型 例如:produces = "application/json; charset=UTF-8"
通過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"),表示所有對的請求必須是以“根目錄/order” 開始
示例1的請求路徑為:http://localhost:8080/springMvcNext/order/orderinfo
示例1 如果注釋掉Controller上的@RequestMapping("order"),則對應(yī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 :處理多個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省略,直接填寫URL映射信息即可,指定其他屬性的情況下value屬性必須明確填寫
上例示例1的訪問路徑為: http://localhost:8080/springMvcNext/order/orderinfo
示例2:RequestMapping接口中value屬性是一個數(shù)組,所有也支持傳一個數(shù)組 示例2的訪問路徑:http://localhost:8080/springMvcNext/order/index 或者 http://localhost:8080/springMvcNext/order/info
示例3:當(dāng)value為空時,表示該方法為類下默認(rèn)的Action,示例3的訪問路徑為:http://localhost:8080/springMvcNext/order
2.URL模板映射
在RequestMapping注解中聲明URI變量,并通過@PathVariable注解的方式訪從實際請求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請求URL: http://localhost:8080/springMvcNext/user/12/order/333 當(dāng)通過此URL發(fā)起請求時,SpringMVC將通過@PathVariable可以提取URL模板中的{×××}中的×××變量, URL變量會自動轉(zhuǎn)換為對應(yīng)的類型,無法轉(zhuǎn)換的則返回錯誤,比如嘗試用以下url訪問:http://localhost:8080/springMvcNext/user/xxx/order/333 其中參數(shù)Userid=xxx,則發(fā)生錯誤:

3.Ant風(fēng)格的URL路徑映射
Ant風(fēng)格通配符如下:
- ? 匹配一個字符
- * 匹配路徑段中的零個或多個字符
- ** 匹配零個或多個路徑段
示例:
@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請求URL: http://localhost:8080/springMvcNext/order/orderdexx?orderNumber=12 可以匹配http://localhost:8080/springMvcNext/order/orderXXXXX?orderNumber=yyyy的所有請求
@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路徑映射,此處略過
通過method屬性指定請求類型
RequestMapping提供的method屬性請求謂詞的類型,如下示例示例只接受GET請求
// 示例4
@RequestMapping(value="detail",method=RequestMethod.GET) //也可直接使用 @GetMapping("detail")
public ModelAndView Info() {
return new ModelAndView("order/info", "message", "Info");
}
對于每種請求類型,SpringMVC還提供了專用的注解:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
通過params指定參數(shù)名或參數(shù)值約束
params屬性可以限定請求參數(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限定請求參數(shù)必須包含參數(shù)orderNumber,如果不包含名為orderNumber的參數(shù),則拒絕訪問:訪問路徑:http://localhost:8080/springMvcNext/order/detail2?orderNumber=12
示例6限定請求參數(shù)必須包含參數(shù)orderNumber并且參數(shù)值不能為1222 訪問路徑:http://localhost:8080/springMvcNext/order/detail3?orderNumber=1222 時報錯

通過headers指定參數(shù)名或參數(shù)值約束
RequestMapping提供的method屬性可以指定請求頭類型,只有請求數(shù)據(jù)頭部類型符合指定的值時,才能正常訪問
// 示例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限定請求頭必須包含apikey:23131313才可以正常返回,直接訪問,返回錯誤:

添加添加header信息apikey:23131313訪問成功:

通過consumes指定請求提交的內(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);
}
示例限定請求參數(shù)類型為application/json,表示該方法只處理請求Content-Type為application/json的請求:
下面通過拋postman測試:
設(shè)置請求參數(shù)格式為application/json,可以正常訪問:

設(shè)置參數(shù)格式為x-form-urlencoded,返回錯誤,Http Status 415

通過produces指定返回的內(nèi)容類型(Content-Type)
produces屬性用于設(shè)定返回內(nèi)容類型,并且滿足以下條件:接受請求header中包含Accept的值與produces設(shè)定的值相同,或者接受的請求使用不顯示設(shè)置accept值
// 示例8 produces 限定返回數(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時,運行報錯,Http status 406

當(dāng)客戶端設(shè)置的accept格式為application/json或者不設(shè)置accept值時,可以正常運行

總結(jié)
以上所述是小編給大家介紹的Spring MVC溫故而知新系列教程之請求映射RequestMapping注解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Java內(nèi)存緩存工具Guava LoadingCache使用解析
這篇文章主要介紹了Java內(nèi)存緩存工具Guava LoadingCache使用解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
Java連接sftp服務(wù)器實現(xiàn)上傳下載功能
這篇文章主要介紹了java連接sftp服務(wù)器實現(xiàn)上傳下載,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
Java并發(fā)編程之詳解ConcurrentHashMap類
在之前的文章中已經(jīng)為大家介紹了java并發(fā)編程的工具:BlockingQueue接口、ArrayBlockingQueue、DelayQueue、LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue、BlockingDeque接口,本文為系列文章第八篇.需要的朋友可以參考下2021-06-06
java中實現(xiàn)list或set轉(zhuǎn)map的方法
這篇文章主要介紹了java中實現(xiàn)list或set轉(zhuǎn)map的方法的相關(guān)資料,需要的朋友可以參考下2017-01-01
MybatisPlus查詢條件空字符串和NULL問題背景分析
文章詳細(xì)分析了MybatisPlus在處理查詢條件時,空字符串和NULL值的問題,MP 3.3.0及以上版本提供了多種解決方法,包括在Bean屬性上使用注解、全局配置等,推薦使用全局配置的方式來解決這個問題,以避免在SQL查詢中出現(xiàn)不必要的空字符串條件,感興趣的朋友跟隨小編一起看看吧2025-03-03

