0%

3.2 @RequestMapping注解 3.2.1 @RequestMapping注解简介

3.2 @RequestMapping注解

3.2.1 @RequestMapping注解简介

开发者需要在控制器内部为每一个请求动作开发相应的处理方法。org.springframework.web.bind.annotation.RequestMapping注解指示Spring用哪一个类或方法来处理请求动作,该注解可用于类或方法。
提示:@RequestMapping注解虽然也包含在org.springframework.web.bind. annotation里面,但是严格来说,它并不属于参数绑定注解。
@RequestMapping注解可以用来注释一个控制器类,在这种情况下,所有方法都将映射为相对于类级别的请求,表示该控制器处理的所有请求都被映射到value属性所指示的路径下。
示例代码如下:

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.GETRequestMethod.POSTRequestMethod.HEADRequestMethod.OPTIONSRequestMethod.PUTRequestMethod.PATCHRequestMethod.DELETERequestMethod.TRACE几种类型
consumes String数组 指定处理请求的提交内容类型(Content-Type),例如 application/jsontext/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属性是@RequestMapping注解的默认属性,因此,如果只有唯一的属性,则可以省略属性名,即如下两个注解含义相同。

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

但如果有超过一个属性,就必须写上value属性名称。
value属性的值也可以是一个空字符串,如下所示:

1
@RequestMapping(value="")

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

1
http://localhost:8080/context

2. method属性

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

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

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

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

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

如果没有指定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
2
3
4
5
@RequestMapping(
value="/hello",
method=RequestMethod.POST,
consumes="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"的请求,同时指明了返回的内容类型为application/json

5. params属性

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

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

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

6. 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/的请求。

原文链接: 3.2 @RequestMapping注解 3.2.1 @RequestMapping注解简介