服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - Java教程 - Spring MVC温故而知新系列教程之请求映射RequestMapping注解

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

2021-05-04 11:51仍是少年 Java教程

这篇文章主要介绍了Spring MVC温故而知新系列教程之请求映射RequestMapping注解的相关知识,文中给大家介绍了RequestMapping注解提供的几个属性及注解说明,感兴趣的朋友跟随脚本之家小编一起学习吧

requestmapping注解说明

@requestmapping注解的作用将web请求映射到特定处理程序类和/或处理程序方法,这个注解可以用于类或者方法上,并通过属性value指定请求路径。用在controller类上表示提供初步的url请求映射信息,相对于web应用的根目录,这是一个前置请求路径。用在controller中方法上,表示提供详细的url映射。如果controller类上没有加requestmapping注解,则方法上注解标记的url则是相对于web应用的根目录。

@requestmapping注解提供以下几个属性:

         name:用于指定映射器名称

         value:用于指定映射路径,同path

         path:用于指定映射路径,同value

         method:用于指定请求类型:get, post, head, options, put, patch, delete, trace

         params:指定请求的参数

         headers:指定请求头部,源码示例:requestmapping(value = "/something", headers = "content-type=text/*")

         consumes:指定处理请求提交的内容类型(content-type),例如application/json, text/html,只有在content-type匹配这些媒体类型之一时才会映射请求

         produces:指定请求返回的内容类型 例如:produces = "application/json; charset=utf-8"

通过value属性指定映射路径

controller类上使用requestmapping注解

?
1
2
3
4
5
6
7
8
9
@controller
@requestmapping("order")
public class orderinfocontroller { 
  //示例1
  @requestmapping("orderinfo"
  public modelandview orderinfo1() {
    return new modelandview("order/info", "message", "orderinfo");
  }
}

在ordercontroller类上添加了注解requestmapping("order"),表示所有对的请求必须是以“根目录/order” 开始

示例1的请求路径为:http://localhost:8080/springmvcnext/order/orderinfo

示例1 如果注释掉controller上的@requestmapping("order"),则对应的请求路径为:http://localhost:8080/springmvcnext /orderinfo

controller方法上使用requestmapping注解

 1.常用基础用法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@controller
@requestmapping("order")
public class orderinfocontroller {
  //示例1
  @requestmapping("orderinfo"
  public modelandview orderinfo1() {
    return new modelandview("order/info", "message", "orderinfo");
  }
  //示例2 :处理多个url映射
  @requestmapping({"info","index"}) //或者@requestmapping(value={"info","index"})
  public modelandview orderinfo2() {
    return new modelandview("order/info","message", "orderinfo2");
  }              
  //示例3
  @requestmapping
  public modelandview orderinfo3() { 
    return new modelandview("order/info","message", "orderinfo3");
  }
}

requestmapping只配置value属性,不显示配置其他属性的情况下,value省略,直接填写url映射信息即可,指定其他属性的情况下value属性必须明确填写

上例示例1的访问路径为: http://localhost:8080/springmvcnext/order/orderinfo

示例2:requestmapping接口中value属性是一个数组,所有也支持传一个数组 示例2的访问路径:http://localhost:8080/springmvcnext/order/index  或者 http://localhost:8080/springmvcnext/order/info

示例3:当value为空时,表示该方法为类下默认的action,示例3的访问路径为:http://localhost:8080/springmvcnext/order

 2.url模板映射

在requestmapping注解中声明uri变量,并通过@pathvariable注解的方式访从实际请求url中获取值,示例如下:

?
1
2
3
4
5
6
7
8
@controller
public class orderinfocontroller {
   // 示例10 带占位符的url
   @requestmapping(value = "user/{userid}/order/{ordernumber}", method = requestmethod.get)
   public modelandview orderinfo4(@pathvariable int userid,@pathvariable string ordernumber) {
      return new modelandview("order/info", "message", "userid:"+userid+" ordernumber:"+ordernumber);
   }
}

示例10请求url:  http://localhost:8080/springmvcnext/user/12/order/333 当通过此url发起请求时,springmvc将通过@pathvariable可以提取url模板中的{×××}中的×××变量, url变量会自动转换为对应的类型,无法转换的则返回错误,比如尝试用以下url访问:http://localhost:8080/springmvcnext/user/xxx/order/333  其中参数userid=xxx,则发生错误:

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

3.ant风格的url路径映射

 ant风格通配符如下:

  • ?  匹配一个字符
  • *    匹配路径段中的零个或多个字符
  • **  匹配零个或多个路径段

 示例:

?
1
2
3
4
5
6
7
8
9
10
@controller
public class orderinfocontroller {
    // 示例11 带占位符的url
    @requestmapping(value = "order*", method = requestmethod.get)
    //@requestmapping(value = "order?", method = requestmethod.get)
    //@requestmapping(value = "order/**", method = requestmethod.get)
    public modelandview orderinfo5(string ordernumber) {
       return new modelandview("order/info", "message", "orderinfo5");
    }
}

示例11请求url:  http://localhost:8080/springmvcnext/order/orderdexx?ordernumber=12 可以匹配http://localhost:8080/springmvcnext/order/orderxxxxx?ordernumber=yyyy的所有请求

 

?
1
2
3
@requestmapping(value = "order?", method = requestmethod.get)可以匹配诸如 “…/ordera?ordernumber….” “…/orders?ordernumber….”
 
 @requestmapping(value = "order/**", method = requestmethod.get)可以匹配诸如 “…/order/aaa?ordernumber….” “…/order/bbb/ccc?ordernumber….”

另外 requestmapping还支持正则表达式风格的url路径映射,此处略过

通过method属性指定请求类型

requestmapping提供的method属性请求谓词的类型,如下示例示例只接受get请求

?
1
2
3
4
5
// 示例4
@requestmapping(value="detail",method=requestmethod.get) //也可直接使用 @getmapping("detail")
public modelandview info() {
  return new modelandview("order/info", "message", "info");
}

对于每种请求类型,springmvc还提供了专用的注解:

@getmapping

@postmapping

@putmapping

@deletemapping

@patchmapping

通过params指定参数名或参数值约束

params属性可以限定请求参数包含特定的参数,也可限定参数值的约束,如下代码所示:

?
1
2
3
4
5
6
7
8
9
10
// 示例5 params 限定参数包含ordernumber
 @requestmapping(value = "detail2", params = "ordernumber")
 public modelandview detail2(string ordernumber) {
   return new modelandview("order/info", "message", ordernumber);
 }
 // 示例6 params 限定参数值
 @requestmapping(value = "detail3", params = "ordernumber!=1222")
 public modelandview detail3(string ordernumber) {
   return new modelandview("order/info", "message", ordernumber);
 }

示例5限定请求参数必须包含参数ordernumber,如果不包含名为ordernumber的参数,则拒绝访问:访问路径:http://localhost:8080/springmvcnext/order/detail2?ordernumber=12

示例6限定请求参数必须包含参数ordernumber并且参数值不能为1222 访问路径:http://localhost:8080/springmvcnext/order/detail3?ordernumber=1222 时报错

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

通过headers指定参数名或参数值约束

 requestmapping提供的method属性可以指定请求头类型,只有请求数据头部类型符合指定的值时,才能正常访问

?
1
2
3
4
5
6
// 示例7 params 限定参数值
    @requestmapping(value = "headtest",headers = "apikey=23131313")
    //@requestmapping(value = "headtest",headers= {"accept=application/json"})
    public modelandview header() {
      return new modelandview("order/info", "message", "header");
    }

示例7限定请求头必须包含apikey:23131313才可以正常返回,直接访问,返回错误:

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

添加添加header信息apikey:23131313访问成功:

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

通过consumes指定请求提交的内容类型(content-type)

?
1
2
3
4
5
// 示例8 consumes
@requestmapping(value = "consumes", method = requestmethod.post, consumes = "application/json")
public modelandview consumes(string ordernumber) {
  return new modelandview("order/info", "message", ordernumber);
}

示例限定请求参数类型为application/json,表示该方法只处理请求content-type为application/json的请求:

下面通过抛postman测试:

设置请求参数格式为application/json,可以正常访问:

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

设置参数格式为x-form-urlencoded,返回错误,http status 415

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

通过produces指定返回的内容类型(content-type)

 produces属性用于设定返回内容类型,并且满足以下条件:接受请求header中包含accept的值与produces设定的值相同,或者接受的请求使用不显示设置accept值

?
1
2
3
4
5
// 示例8 produces 限定返回数据application/json
   @requestmapping(value = "produces", method = requestmethod.get, produces = "application/json")
   public modelandview produces(string ordernumber) {
     return new modelandview("order/info", "message", ordernumber);
   }

示例8 表示返回内容格式application/json ,当客户端设置的accept格式为text/json时,运行报错,http status 406

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

当客户端设置的accept格式为application/json或者不设置accept值时,可以正常运行

Spring MVC温故而知新系列教程之请求映射RequestMapping注解

总结

以上所述是小编给大家介绍的spring mvc温故而知新系列教程之请求映射requestmapping注解,希望对大家有所帮助http://localhost:8080/springmvcnext/order/orderinfo

示例2:requestmapping接口中value属性是一个数组,所有也支持传一个数组 示例2的访问路径:http://localhost:8080/springmvcnext/order/index  或者 http://localhost:8080/springmvcnext/order/info

示例3:当value为空时,表示该方法为类下默认的action,示例3的访问路径为:http://localhost:8080/springmvcnext/order

延伸 · 阅读

精彩推荐