基于SpringMVC @RequestMapping的參數(shù)和用法
@RequestMapping的參數(shù)和用法
RequestMapping里面的注解包含的參數(shù)如圖:

RequestMapping是一個(gè)用來(lái)處理請(qǐng)求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請(qǐng)求的方法都是以該地址作為父路徑。
@RequestMapping 除了修飾方法, 還可來(lái)修飾類 :
類定義處:提供初步的請(qǐng)求映射信息。相對(duì)于 WEB 應(yīng)用的根目錄;
方法處:提供進(jìn)一步的細(xì)分映射信息。 相對(duì)于類定義處的 URL。
若類定義處未標(biāo)注 @RequestMapping,則方法處標(biāo)記的 URL相對(duì)于 WEB 應(yīng)用的根目錄
返回ModelAndView時(shí)的url會(huì)根據(jù)你的 @RequestMapping實(shí)際情況組成。
如果類上沒有映射,那么url直接就是方法的映射;否則url為類上+方法上映射路徑組合。
對(duì)應(yīng)項(xiàng)目jsp位置則是一級(jí)路徑對(duì)應(yīng)一級(jí)文件目錄。
如url為/default/index對(duì)應(yīng)項(xiàng)目中webapp/default/index.jsp
RequestMapping注解有六個(gè)屬性,下面我們把她分成三類進(jìn)行說(shuō)明
【1】value, method
value:指定請(qǐng)求的實(shí)際地址,指定的地址可以是URI Template 模式;
method: 指定請(qǐng)求的method類型, GET、POST、PUT、DELETE等;
【2】consumes,produces
consumes: 指定處理請(qǐng)求的提交內(nèi)容類型(Content-Type),例如application/json, text/html;
produces:指定返回的內(nèi)容類型,僅當(dāng)request請(qǐng)求頭中的(Accept)類型中包含該指定類型才返回;
【3】params,headers
params: 指定request中必須包含某些參數(shù)值時(shí),才讓該方法處理。
headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請(qǐng)求。
測(cè)試示例如下:
【1】value||path
- JSP 頁(yè)面
<a href="springmvc/testRequestMapping" rel="external nofollow" >Test RequestMapping</a>
- controller
@RequestMapping(value="/testRequestMapping" )
public String testRequestMapping() {
System.out.println("testRequestMapping");
return SUCCESS;
}
成功返回success.jsp 。
Tips :若 href 屬性值,不等于value值,則將提示404錯(cuò)誤。
value的uri值為以下三類:
A) 可以指定為普通的具體值;
如下:
@RequestMapping("/testRequestMapping")
B) 可以指定為含有某變量的一類值(URI Template Patterns with Path Variables)–restful風(fēng)格;
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable Integer id2) {
System.out.println("testPathVariable: " + id2);
return SUCCESS;
}
除了value還有path,二者效果等同,可以參考源碼如下圖:

其中關(guān)于@PathVariable 有如下說(shuō)明:
① 如果路徑中的變量與方法中的變量名一致,可直接使用@PathVariable;
② 如果二者不一致,則使用@PathVariable(Variable)顯示指定要綁定的路徑中的變量 。
@PathVariable只能綁定路徑中的占位符參數(shù),且路徑中必須有參數(shù)。
@PathVariable用法參考路徑參數(shù)綁定參考
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id2) {
System.out.println("testPathVariable: " + id2);
return SUCCESS;
}
//路徑中的 id 與 方法中的 id2 綁定
C) 可以指定為含正則表達(dá)式的一類值( URI Template Patterns with Regular Expressions);
@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")
public void handle(@PathVariable String version, @PathVariable String extension) {
// ...
}
}
【2】method
- JSP 頁(yè)面
<a href="springmvc/testMethod" rel="external nofollow" >Test Method</a> //href 默認(rèn)為get 請(qǐng)求。
- controller–限制接收post 請(qǐng)求。
@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
- result as follows :
HTTP Status 405 - Request method ‘GET' not supported 。

【狀態(tài)碼405表示:請(qǐng)求中指定的方法不被允許?!?/p>
將method 改為method = RequestMethod.GET正常跳轉(zhuǎn)頁(yè)面。
【3】consumes
- JSP 頁(yè)面
仍以testMethod為例,提交表單。
默認(rèn)contentType為Content-Type:application/x-www-form-urlencoded。
<form action="springmvc/testMethod" method="POST"> <input type="text" name="username" value=""/> <input type="submit" value="submit"/> </form>

- controller–限制接收post 請(qǐng)求以及consumes="application/json"。
@RequestMapping(value = "/testMethod", method = RequestMethod.POST,consumes="application/json")
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
- result as follows :

【狀態(tài)碼415表示:由于媒介類型不被支持,服務(wù)器不會(huì)接受請(qǐng)求。。】
去掉 consumes屬性,頁(yè)面正常跳轉(zhuǎn) !
【4】produces
后臺(tái)代碼如下:
@RequestMapping(value = "/testMethod", method = RequestMethod.POST,produces="application/json")
public void testMethod2(HttpServletRequest request,HttpServletResponse response,Model model)
throws IOException {
request.getHeader("Accept");
System.out.println(request.getHeader("Accept"));
// response.setContentType("application/json");
String username = request.getParameter("username");
System.out.println("testMethod..."+username);
model.addAttribute("user", username);
Object jsonString = "{'name': 'helloworlda'}";
JSONObject jsonobj=JSONObject.fromObject(jsonString);
PrintWriter out = response.getWriter();
out.print(jsonobj);
}
- 瀏覽器請(qǐng)求頭
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
其中最后一項(xiàng) : */*;q=0.8。
該項(xiàng)表明可以接收任何類型的,權(quán)重系數(shù)0.8表明如果前面幾種類型不能正常接收。則使用該項(xiàng)進(jìn)行自動(dòng)分析。
application/json 幾種主流瀏覽器都可以自動(dòng)解析。
【5】params
- JSP頁(yè)面
form action="springmvc/testParamsAndHeaders" method="POST"> <input type="text" name="username" value=""/> <input type="text" name="age" value=""/> <input type="submit" value="submit"/> </form>
參數(shù) username=tom;age = 10;
- 后臺(tái)代碼:
設(shè)定必須包含username 和age兩個(gè)參數(shù),且age參數(shù)不為10 (可以有多個(gè)參數(shù))。
@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" })
public String testParamsAndHeaders() {
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
- result as follows :

【狀態(tài)碼400表示:服務(wù)器未能理解請(qǐng)求。 】
- 將age 改為其他值,正常跳轉(zhuǎn)。

【6】headers
- 瀏覽器請(qǐng)求頭如下:

- 后臺(tái)測(cè)試代碼如下:
@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" }, headers = { "Accept-Language=US,zh;q=0.8" })
public String testParamsAndHeaders() {
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
設(shè)定請(qǐng)求頭中第一語(yǔ)言必須為US。
- result as follows :

【狀態(tài)碼404表示:服務(wù)器無(wú)法找到被請(qǐng)求的頁(yè)面?!?/p>
將后臺(tái)代碼改為zh-CN。。。

頁(yè)面正常跳轉(zhuǎn)。
【Tips】:
① 服務(wù)器首先根據(jù)URL去找頁(yè)面,如果找不到就返回404;
② 如果找到,但是不能正常處理,就會(huì)返回 5XX 類型錯(cuò)誤。
其中在第一步過程中,會(huì)根據(jù)請(qǐng)求頭進(jìn)行一系列判斷 !
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java利用ffmpeg實(shí)現(xiàn)視頻MP4轉(zhuǎn)m3u8
本文綜合了下網(wǎng)上教程,從ffmpeg工具轉(zhuǎn)碼,ffmpeg視頻播放,java語(yǔ)言操控ffmpeg轉(zhuǎn)碼,轉(zhuǎn)碼后視頻上傳阿里云oss,四個(gè)方面完整記錄下這個(gè)流程,需要的朋友可以參考下2024-02-02
spring mvc中注解@ModelAttribute的妙用分享
這篇文章主要給大家介紹了關(guān)于spring mvc中注解@ModelAttribute妙用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Android具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-09-09
分享Java8中通過Stream對(duì)列表進(jìn)行去重的實(shí)現(xiàn)
本文主要介紹了分享Java8中通過Stream對(duì)列表進(jìn)行去重的實(shí)現(xiàn),包括兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
mybatis-plus 查詢時(shí)排除字段方法的兩種方法
我們?cè)陂_發(fā)應(yīng)用時(shí),在某些應(yīng)用場(chǎng)景下查詢有時(shí)需要排除某些字段,本文主要介紹了兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09
Springboot 整合通用mapper和pagehelper展示分頁(yè)數(shù)據(jù)的問題(附github源碼)
這篇文章主要介紹了Springboot 整合通用mapper和pagehelper展示分頁(yè)數(shù)據(jù)(附github源碼),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09

