SpringMVC知识盘点及总结6@RequestMapping注解的headers属性及路径中的占位符


@RequestMapping注解的headers属性

知识点五、

@RequestMapping注解的headers属性通过请求的请求头信息匹配请求映射
@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息
和请求映射的匹配关系:
"header":要求请求映射所匹配的请求必须携带header请求头信息
"!header":要求请求映射所匹配的请求必须不能携带header请求头信息
"header=value":要求请求映射所匹配的请求必须携带header请求头信息且header=value
"header!=value":要求请求映射所匹配的请求必须携带headerheader!=value

1.若当前请求满足@RequestMapping注解的valuemethod属性,但是不满足header属性,此时
页面显示404错误,即资源未找到。
2.请求头其实就是键值对形式,用法与Param属性相同,例如 header={"Host=localhost:8081"}

顺便总结以下三种常见错误:
404错误--->当前请求没有跟任何一个RequestMethodvalue匹配或请求头信息匹配不成功
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





免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM