@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