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