@RequestMapping注解的headers屬性
知識點五、
@RequestMapping注解的headers屬性通過請求的請求頭信息匹配請求映射
@RequestMapping注解的headers屬性是一個字符串類型的數組,可以通過四種表達式設置請求頭信息
和請求映射的匹配關系:
"header":要求請求映射所匹配的請求必須攜帶header請求頭信息
"!header":要求請求映射所匹配的請求必須不能攜帶header請求頭信息
"header=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header=value
"header!=value":要求請求映射所匹配的請求必須攜帶header且header!=value
1.若當前請求滿足@RequestMapping注解的value和method屬性,但是不滿足header屬性,此時
頁面顯示404錯誤,即資源未找到。
2.請求頭其實就是鍵值對形式,用法與Param屬性相同,例如 header={"Host=localhost:8081"}
順便總結以下三種常見錯誤:
404錯誤--->當前請求沒有跟任何一個RequestMethod的value匹配或請求頭信息匹配不成功
405錯誤--->當前請求方式無法匹配(請求方式不支持)
400錯誤--->請求參數匹配不成功
接下來測試一下:
//測試RequestMapping的headers屬性 @RequestMapping(value = "/testParamsAndHeaders", headers = "Host=localhost:8080") public String testParamsAndHeaders(){ return "success"; }
<a th:href="@{/hello/testParamsAndHeaders}" >測試RequestMapping注解的headers屬性</a><br>
Tomcat默認端口8080,請求地址中帶有請求頭信息--->Host: localhost:8080
訪問成功!如果端口號改為8081,就會報404錯誤。
SpringMVc支持ant風格的路徑
? :表示任意的單個字符 不能寫/,#,%,\ 這幾個特殊字符
* :表示任意的0個或多個字符
** :表示任意的一層或多層目錄
注意:在使用**時,只能使用/**/xxx的方式
測試一:
<a th:href="@{/hello/aka/testAnt}">測試RequestMapping可以匹配Ant風格的路徑</a><br>
//測試表示任意的單個字符Ant風格 @RequestMapping("/a?a/testAnt") public String testAnt(){ return "success"; }
測試二:
<a th:href="@{/hello/a123456fg1a/testAnt}">測試RequestMapping可以匹配Ant風格的路徑</a><br>
//測試表示任意的0個或多個字符Ant風格 @RequestMapping("/a*a/testAnt") public String testAnt(){ return "success"; }
測試三:
<a th:href="@{/hello/a/2k2/3k3/4k4/a/testAnt}">測試RequestMapping可以匹配Ant風格的路徑</a><br>
//測試多層目錄Ant風格 @RequestMapping("/a*a/testAnt") public String testAnt(){ return "success"; }
***SpringMVC支持路徑中的占位符,這部分比較重要
原始方式:/deleteUser?id=1
rest方式:/deleteUser/1
SpringMVC路徑中的占位符常用於restful風格中,當請求路徑中將某些數據通過路徑的方式傳輸到服務器中,就
可以在相應的@RequestMapping注解的value屬性中通過占位符{xxx}表示傳輸的數據,再通過@PathVariable注
解,將占位符所表示的數據賦值給控制器方法的形參
<a th:href="@{/testPath/1/admin}">測試路徑中的占位符-->/testRest</a><br>
@RequestMapping("/testPath/{id}/{username}") public String testRest(@pathVariable("id") String id, @pathVariable("username") String username){ System.out.println("id:"+id+",username:"+username); return "success"; }
//輸出內容為-->id:1,username:admin