zoukankan      html  css  js  c++  java
  • @RequestMapping映射请求,@PathVariable,@RequestParam,@RequestHeader的使用

    1、@RequestMapping

    Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求,在控制器的类定义及方法定义处都可标注。

    @RequestMapping

    • 类定义处:提供初步的请求映射信息。相当于当前 WEB 应用的根目录
    • 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。
    • 若类定义处未标注 @RequestMapping,则方法处标记的 URL 相当于当前 WEB 应用的根目录
    • 若类定义处标注 @RequestMapping,则方法处标记的 URL 相对于类定义处的@RequestMapping而言的!

    DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。

    映射请求参数、请求方法或请求头
    @RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求

    @RequestMapping 的 value、method、params 及 heads 分别表示请求 URL、请求方法、请求参数及请求头的映射条件,他们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

    (1)params 和 headers支持简单的表达式:

    • param1: 表示请求必须包含名为 param1 的请求参数
    • !param1: 表示请求不能包含名为 param1 的请求参数
    • param1 != value1: 表示请求包含名为 param1 的请求参数,但其值 不能为 value1
    • {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1!
    1 @RequestMapping(value="/helloParams",params={"username","pwd!=123456"})
    2 public String helloParams(){
    3     return "success";
    4 }

    表示请求URL中必须包含username参数,pwd可不包含,若包含pwd,则值不能为123456。

    (2)Ant风格的请求URL

    Ant 风格资源地址支持 3 种匹配符:

    • ?:匹配文件名中的一个字符
    • *:匹配文件名中的任意多个任意字符[0个字符除外!]
    • **:** 匹配多层路径

    例如:

    • /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

    (3)@PathVariable 映射 URL 绑定的占位符
    带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义

    通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:

    URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中,需要注意的是:该注解的value属性值要与占位符保持一致。

    1 @RequestMapping(value="/helloPathVariable/{id}")
    2 public String helloPathVariable(@PathVariable(value="id") Integer id) throws IOException{
    3     System.out.println("id="+id);
    4     return "success";
    5 }

    (4)method=RequestMethod.GET/POST/PUT/DELETE,可以实现REST请求风格的URL

     1 //REST请求方式-----GET获取
     2 @RequestMapping(value="/hello/{id}",method=RequestMethod.GET)
     3 public String helloGet(@PathVariable(value="id") Integer id){
     4     return "success";
     5 }
     6 //REST请求方式-----POST添加
     7 @RequestMapping(value="/hello/{id}",method=RequestMethod.POST)
     8 public String helloPost(@PathVariable(value="id") Integer id){
     9     return "success";
    10 }
    11 //REST请求方式-----PUT修改
    12 @RequestMapping(value="/hello/{id}",method=RequestMethod.PUT)
    13 public String helloPut(@PathVariable(value="id") Integer id){
    14     return "success";
    15 }
    16 //REST请求方式-----DELETE删除
    17 @RequestMapping(value="/hello/{id}",method=RequestMethod.DELETE)
    18 public String helloDelete(@PathVariable(value="id") Integer id){
    19     return "success";
    20 }

    如何使用REST请求风格

    (5)@RequestParam

    @RequestParam可以接收请求的参数,相当于Servlet的getParameter()方法!

    注意:要把@RequestParam和@PathVariable区分开:

    三个默认属性:

    • value:这个字段要与请求参数的name属性值一致!
    • required:布尔值,默认是true,当指定为false的时候,说明这个参数不是必须的,可以不带!
    • defaultValue:在我们不传值的时候,默认使用defaultValue的值,传递参数的时候,使用我们传递的参数值!
    1 //获取请求参数信息
    2 @RequestMapping(value="/helloReqParam")
    3 public String helloReqParam(@RequestParam(value="username",required=false) String username){
    4     System.out.println("username-------"+username);
    5     return SUCCESS;
    6 }

    (6)@RequestHeader

    @RequestHeader:获取请求头信息,默认属性:

    • value:这个字段要与请求参数的name属性值一致!
    • required:布尔值,默认是true,当指定为false的时候,说明这个参数不是必须的,可以不带!
    • defaultValue:在我们不传值的时候,默认使用defaultValue的值,传递参数的时候,使用我们传递的参数值!
     1 //获取请求头信息
     2 @RequestMapping(value="/helloReqHeader")
     3 public String helloReqHeader(@RequestHeader(value="Accept",required=true,defaultValue="123") String accept){
     4     System.out.println("accept-------"+accept);
     5     //accept-------text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
     6     return "success";
     7 }
     8 @RequestMapping(value="/helloReqHeader")
     9 public String helloReqHeader(@RequestHeader(value="Accept1",required=true,defaultValue="123") String accept){
    10     System.out.println("accept-------"+accept);//accept-------123
    11     return "success";
    12 }
    13 @RequestMapping(value="/helloReqHeader")
    14 public String helloReqHeader(@RequestHeader(value="Accept1",required=true) String accept){
    15     System.out.println("accept-------"+accept);//400错误
    16     return "success";
    17 }
  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/lixiang1993/p/7425390.html
Copyright © 2011-2022 走看看