3.2 @RequestMapping注解 3.2.1 @RequestMapping注解简介
3.2 @RequestMapping注解
3.2.1 @RequestMapping注解简介
RequestMapping注解指定处理请求的类或方法
开发者需要在控制器内部为每一个请求动作开发相应的处理方法。org.springframework.web.bind.annotation.RequestMapping
注解指示Spring
用哪一个类或方法来处理请求动作,该注解可用于类或方法。
提示:@RequestMapping
注解虽然也包含在org.springframework.web.bind.annotation
里面,但是严格来说,它并不属于参数绑定注解。
RequestMapping注解放在类前面
@RequestMapping
注解可以用来注释一个控制器类,在这种情况下,所有方法都将映射为相对于类级别的请求,表示该控制器处理的所有请求都被映射到value
属性所指示的路径下。
程序 RequestMapping注解示例
示例代码如下:
1 |
|
由于UserController
类中添加了value="/user"
的@RequestMapping
注解,因此要在所有相关路径前面加上/user"
,此时方法被映射到如下请求URL
:
1 | http://localhost:8080/user/register |
@RequestMapping注解的属性
使用@RequestMapping
注解可指定下标所示的属性。
属性 | 类型 | 是否必要 | 说明 |
---|---|---|---|
value |
String 数组 |
否 | 用于将指定请求的实际地址映射到方法上 |
name |
Sting |
否 | 给映射地址指定一个别名 |
method |
RequestMethod 数组 |
否 | 映射指定请求的方法类型,包括
|
consumes |
String 数组 |
否 | 指定处理请求的提交内容类型(Content-Type) ,例如:
|
parms |
String 数组 |
否 | 指定request 中必须包含某些参数值时,才让该方法处理 |
headers |
String 数组 |
否 | 指定 request 中必须包含某些指定的 header 值时,才能让该方法处理请求 |
path |
String 数组 |
否 | 在Servlet 环境中只有:URI 路径映射(例如“/myPath.do ”)。也支持如ant 的基于路径模式(例如“/myPath/* ”)。在方法层面上,支持相对路径(例如“ edit. do ”) |
@RequestMapping
注解支持的常用属性示例如下。
1. value属性 地址映射
@RequestMapping
是一个用来处理请求地址映射的注解,可以使用@RequestMapping
注释一个方法或类,一个采用@RequestMapping
注释的方法将成为一个请求处理方法,例如:
1 |
|
该示例使用@RequestMapping
注解的value
属性将URL
映射到方法上。在这个例子中,将hello
映射到hello
方法上,使用如下URL
访问应用时将由hello
方法进行处理。
1 | http://localhost:8080/context/hello |
只有value属性时属性名value可以省略
由于value
属性是@RequestMapping
注解的默认属性,因此,如果只有唯一的value
属性时,则可以省略``value`属性名,即如下两个注解含义相同。
1 |
有多个属性时不可省略value属性名
但如果有超过一个属性,就必须写上value
属性名称。
value属性值可以是空字符串
value
属性的值也可以是一个空字符串,如下所示:
1 |
此时该方法被映射到如下请求URL
1 | http://localhost:8080/context |
2. method属性 HTTP请求方式
该属性用来指示该方法仅处理哪些**HTTP
请求方式**。
只支持单个HTTP请求方式
1 |
以上代码method=RequestMethod.POST
表示该方法只支持POST
请求。
只支持多个HTTP请求方式
也可以同时支持多个HTTP
请求方式。如:
1 |
支持任意HTTP请求方式
如果没有指定method
属性值,则请求处理方法可以处理任意的HTTP
请求方式。
Spring4.3 新增的HTTP请求方式注解
提示:Spring4.3
之后,新增了@GetMapping
、@PostMapping
、@PutMapping
、@DeleteMapping
、@PatchMapping
注解,这几个注解可以指定的属性和@RequestMapping
注解类似,区别在于@GetMapping
注解只支持GET
方式的请求;@PostMapping
注解只支持POST
方式的请求;@PutMapping
、@DeleteMapping
、@PatchMapping
分别对应PUT
请求、DELETE
请求和PATCH
请求,使用比较少。
3. consumes属性 请求提交的内容类型
该属性指定处理请求的提交内容类型
(Content-Type)。
1 |
表示方法仅处理requestContent-Type
为“application/json
”类型的请求。
4. produces属性 响应返回内容类型
该属性指定返回的内容类型,返回的内容类型必须是request
请求头(Accept
)中所包含的类型
1 | RequestMapping( |
方法仅处理request
请求中Accept
头中包含了"application/json"
的POST
请求,同时指明了返回的内容类型为application/json
。
5. params属性 请求必须带有的参数值
params
属性指定``request`中必须包含某些参数值时,才让该方法处理。例如如下注解的
1 |
方法仅处理请求参数中有名为"myParam"
并且值为"myValue"
的请求。
6. headers属性 请求必须带有的header值
headers
属性指定request`中必须包含某些指定的
header`值时,才能让该方法处理请求。
1 | @RequestMapping( |
方法仅处理header
中包含了指定Referer
请求头和对应值为http://www.fkit.org/
的请求。