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
2
3
4
5
6
7
8
9
10
11
12
13
14
@Controller
@RequestMapping(value="/user")
public class UserController
{
@RequestMapping(value="/register")
public String register()
{
return "register";
}
@RequestMapping(value="/login")
public String login(){
return "login";
}
}

由于UserController类中添加了value="/user"@RequestMapping注解,因此要在所有相关路径前面加上/user",此时方法被映射到如下请求URL:

1
2
http://localhost:8080/user/register
http://localhost:8080/user/login

@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
2
3
4
@RequestMapping(value="/hello")
public ModelAndview hello(){
return …;
}

该示例使用@RequestMapping注解的value属性将URL映射到方法上。在这个例子中,将hello映射到hello方法上,使用如下URL访问应用时将由hello方法进行处理。

1
http://localhost:8080/context/hello

只有value属性时属性名value可以省略

由于value属性是@RequestMapping注解的默认属性,因此,如果只有唯一的value属性时,则可以省略``value`属性名,即如下两个注解含义相同。

1
2
@RequestMapping(value="/hello")
@RequestMapping("/hello")

有多个属性时不可省略value属性名

但如果有超过一个属性,就必须写上value属性名称。

value属性值可以是空字符串

value属性的值也可以是一个空字符串,如下所示:

1
@RequestMapping(value="")

此时该方法被映射到如下请求URL

1
http://localhost:8080/context

2. method属性 HTTP请求方式

该属性用来指示该方法仅处理哪些**HTTP请求方式**。

只支持单个HTTP请求方式

1
@RequestMapping(value="/hello", method=RequestMethod.POST)

以上代码method=RequestMethod.POST表示该方法只支持POST请求。

只支持多个HTTP请求方式

也可以同时支持多个HTTP请求方式。如:

1
2
3
4
@RequestMapping(
value="/hello",
method={RequestMethod.POST,RequestMethod.GET}
)

支持任意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
2
3
4
5
@RequestMapping(
value="/hello",
method=RequestMethod.POST,
consumes="application/json"
)

表示方法仅处理requestContent-Type为“application/json”类型的请求。

4. produces属性 响应返回内容类型

该属性指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型

1
2
3
4
5
6
RequestMapping(
value="/hello",
method=RequestMethod.POST,
consumes="application/json",
produces="application/json"
)

方法仅处理request请求中Accept头中包含了"application/json"POST请求,同时指明了返回的内容类型为application/json

5. params属性 请求必须带有的参数值

params属性指定``request`中必须包含某些参数值时,才让该方法处理。例如如下注解的

1
2
3
4
5
@RequestMapping(
value="/hello",
method=RequestMethod.POST,
params="myParam=myValue"
)

方法仅处理请求参数中有名为"myParam"并且值为"myValue"的请求。

6. headers属性 请求必须带有的header值

headers属性指定request`中必须包含某些指定的header`值时,才能让该方法处理请求

1
2
3
4
5
@RequestMapping(
value="/hello",
method=RequestMethod.POST,
headers="Referer=http://www.fkit.org/"
)

方法仅处理header中包含了指定Referer请求头和对应值为http://www.fkit.org/的请求。