Spring MVC - 02 RequestMapping對映請求
使用 @RequestMapping 對映請求
1.SpringMVC 使用@RequestMapping 註解為 控制器 指定可以處理哪些URL 請求
2. 在控制器的 類定義 及 方法定義處 都可以標註@RequestMapping
類定義處: 提供初步的請求對映資訊。 相對於 WEB 應用的根目錄
方法處: 提供進一步的細分對映資訊。相對於類定義處的URL。若類定義處未標註 @RequestMapping,則方法
處標記的URL 相對於WEB 應用的根目錄
3.DispatcherServlet擷取請求後,就通過控制器上@RequestMapping 提供的對映資訊確定請求所對應的處理方法。
@Controller public class SpringMVCTest { public static final String SUCCESS = "success"; @RequestMapping("/testRequestMapping") public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUCCESS; } }
<a href="testRequestMapping">Test RequestMapping</a>
http://localhost:8080/testRequestMapping
@Controller @RequestMapping("springmvc") public class SpringMVCTest { public static final String SUCCESS = "success"; @RequestMapping("/testRequestMapping") public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUCCESS; } }
<a href="springmvc/testRequestMapping">Test RequestMapping</a>
http://localhost:8080/springmvc/testRequestMapping
對映請求引數、請求方法或請求頭
@RequestMapping 除了可以使用 請求URL 對映請求 外,還可以使用 請求方法、請求引數 及 請求頭對映請求
@ RequestMapping 的 value、method、params及 headers 分別表示 請求 URL、 請求方法、請求引數及請求頭的對映條件,它們之間是與的關係。聯合使用多個條件可讓請求對映更加精確化。
params 和 headers 支援簡單的表示式:
- param1:表示請求必須包含名為 param1的請求引數
- !param1:表示請求不能包含名為 param1的請求引數
- param1!=value1:表示請求包含名為 param1的請求引數,但其值不能為 value1
- {“param1=value1”,”param2”}:表示請求必須包含名為 param1 和 param2的兩個請求引數,且param1引數的值必須為 value1
/** * 使用 method 屬性來指定請求方式 * @return */ @RequestMapping(value = "/testMethod", method = RequestMethod.POST) public String testMethod(){ System.out.println("testMethod"); return SUCCESS; }
<a href="springmvc/testMethod">Test Method</a><br/>
<form action="springmvc/testMethod" method="POST">
<input type="submit" value="submit"/>
</form>
@RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"}) public String testParamsAndHeaders(){ System.out.println("testParamsAndHeaders"); return SUCCESS; }
<a href="springmvc/testParamsAndHeaders?username=sun&age=10">Test ParamsAndHeaders</a><br/>
報錯:
20-Oct-2018 16:39:22.796 警告 [catalina-exec-1] org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod No matching handler method found for servlet request:
path '/springmvc/testParamsAndHeaders', method 'GET', parameters map['username' -> array<String>['sun'], 'age' -> array<String>['10']]
修改age=11 後訪問正常
設定 headers
HTTP 協議報文格式
@RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"}, headers = {"Accept-Language=zh-CN,zh;q=0.9"}) public String testParamsAndHeaders(){ System.out.println("testParamsAndHeaders"); return SUCCESS; }
IE 無法訪問, Chrome 可以訪問
Ant 風格資源地址
Ant 風格資源地址 支援 3種匹配符:
? : 匹配檔名中的一個字元
* : 匹配檔名中的任意字元
**: ** 匹配多層路徑
@RequestMapping 支援 Ant 風格的URL:
/user/*/createUser: 匹配 /user/aaa/createUser 、 /user/bbb/createUser等URL
/user/**/createUser: 匹配 /user/createUser 、 /user/aaa/bbb/createUser等URL
/user/createUser??: 匹配 /user/createUserAA 、 /user/createUserBB等URL
@RequestMapping("/testAntPath/*/abc") public String testAntPath(){ System.out.println("testAntPath"); return SUCCESS;
}
<a href="/springmvc/testAntPath/mmm/abc">Test AntPath</a><br/><br/>
@ PathVariable 對映 URL 繫結的佔位符
帶佔位符的 URL 是 Spring 3.0 新增的功能,該功能在SpringMVC 向 REST 目標挺進發展過程中具有里程碑式的意義。
通過 @ PathVariable 可以將URL 中佔位符 引數繫結到 控制器 處理方法的入參中:
URL 中的 {xxx} 佔位符可以通過 @ PathVariable(“xxx”) 繫結到操作方法的入參中。
@RequestMapping("/testPathVariable/{id}") public String testPathVariable(@PathVariable("id") Integer id){ System.out.println("testPathVariable: " + id); return SUCCESS; }
<a href="/springmvc/testPathVariable/1">Test PathVariable</a><br/><br/>
Console: testPathVariable: 1