0%

spring | @RequestMapping

@RequestMapping 的用法。

@RequestMapping中的参数

参数 说明
value 指定请求地址,指定的 url 可以是 url template 模式
method 请求类型
consumes 提交内容类型,application/json,application/xml 等
produces 指定返回内容类型
params requests 必须包含某值
headers
path 指定路径,和 value 一样

注解在Controller类上

@RequestMapping 注解在 Controller 类上,这时类的注解是相对于 Web 根目录,而方法上的是相对于类上的路径。

注意: @RequestMapping("/index") 等同于 @RequestMapping(value = "/index")

1
2
3
4
5
6
7
8
9
10
11
12
@RestController
@RequestMapping("/user")
// @RequestMapping(value = "/user")
public class UserController {

@RequestMapping("/login")
public String login() {
return "success";
}
}
// 此时请求的实际路径是:/user/login
// 在类上的@RequestMapping相当于声明一个根路径,在请求的时候他会把类和方上的路径进行拼接

注解在Controller类的方法上

method属性:

通过method属性来指定请求的类型:

  • GET(查)
  • POST(增)
  • PUT(改)
  • DELETE(删)

通过 @RequestMapping(value="/login",method=RequestMethod.GET) 来指定 login() 方法 仅处理通过 GET 方式发来的请求

1
2
3
4
5
6
7
8
9
10
@RestController
@RequestMapping(path = "/user")
public class UserController {

// 通过 method 属性来指定请求的类型,此时只能使用GET请求访问,使用POST会报错。
@RequestMapping(path = "/login", method=RequestMethod.GET)
public String login() {
return "success";
}
}

通过 @RequestMapping(value="/login",method=RequestMethod.POST) 来指定 login() 方法 仅处理通过 POST 方式发来的请求

1
2
3
4
5
6
7
8
9
10
@RestController
@RequestMapping(path = "/user")
public class UserController {

// 通过 method 属性来指定请求的类型,此时只能使用POST请求访问,使用GET会报错。
@RequestMapping(path = "/login", method=RequestMethod.POST)
public String login() {
return "success";
}
}

由于在 RequestMapping 注解类中 method() 方法返回的是 RequestMethod 数组,所以可以给 method 同时指定多个请求方式,例如

1
2
3
4
5
6
7
8
9
@RestController
@RequestMapping(path = "/user")
public class UserController {
    // 该方法将同时接收通过GET和POST方式发来的请求
@RequestMapping(path = "/login", method={RequestMethod.POST,RequestMethod.GET})
public String login() {
return "success";
}
}

params属性:

@RequestMappingparams 属性,该属性表示请求参数,也就是追加在 URL 上的键值对,多个请求参数以 & 隔开,例如:

http://localhost/SpringMVC/user/login?username=kolbe&password=123456

则这个请求的参数为 username=kolbe 以及 password=123456@RequestMapping 中可以使用 params 来限制请求参数,来实现进一步的过滤请求,举个例子:

1
2
3
4
5
6
7
8
9
10
@Controller
@RequestMapping(path = "/user")
public class UserController {
       
    // 该方法将接收 /user/login 发来的请求,且请求参数必须为 username=kolbe&password=123456
@RequestMapping(path = "/login", params={"username=kolbe","password=123456"})
public String login() {
return "success";
}
}

该例中则表示 UserController 中的 login() 方法仅处理 /user/login 发来的请求,且必须带有 username=kolbe&password=123456 的请求参数,否则浏览器将返回 HTTP 404 的错误。

headers 属性

@RequestMappingheaders 属性,该属性表示请求头。

通过 @RequestMapping 中的 headers 属性,可以限制客户端发来的请求。

1
2
3
4
5
6
7
8
9
@Controller
@RequestMapping(path = "/user")
public class UserController {
    // 表示只接收 localhost:8080 发来的请求,不会处理其他请求
@RequestMapping(path = "/login", headers="Host=localhost:8080")
public String login() {
return "success";
}
}

带有占位符的URL

带占位符的 URLSpring 3.0 新增的功能,可以通过 @PathVariableURL 中的占位符绑定到控制器的处理方法的参数中,占位符使用{}括起来。

1
2
3
4
5
6
7
8
9
10
@Controller
@RequestMapping(path = "/user")
public class UserController {
    // 当只存在一个参数的时候,可以省略@PathVariable("id")注解,但是后边的参数名必须和{}中的占位符名字一致,否则找不到会报错。
// 当给定 @PathVariable("id") 的时候括号中的参数名字必须和{}中占位符的名字一致。此时后边的参数可以随便定义其他的名字比如:@PathVariable("id") Integer param
@RequestMapping(value="/{id}", method=RequestMethod.GET)
public String show(@PathVariable("id") Integer id) {
return "success";
}
}

在这个控制器中 show() 方法将可以接收 user/1、user/2、user/3 等等的路径请求,请求的方法必须为 GET,使用 @PathVariable 为应用实现 REST 规范提供了具大的便利条件。

请我喝杯咖啡吧~