SpringMVC(1)-@RequestMapping的简单使用
本文核心内容来自于韩顺平老师的课程
@RequestMapping注解可以用来指定控制器或者处理器的某个方法的请求url
@Controller
public class UserServlet {
@RequestMapping("/login")
public String login() {
return "login";
}
}
1 @RequestMapping 修饰方法和类
- @RequestMapping 注解可以修饰方法,还可以修饰类
- 当同时修饰类和方法时,请求的 url 就是组合
/类请求值/方法请求值
@Controller
@RequestMapping("/user")
public class UserHandler {
@RequestMapping(value = "/buy")
public String buy() {
System.out.println("购买商品");
return "success";
}
}
- 以代码为例,我们在类上加了@RequestMapping("/user") ,在方法上加了@RequestMapping("/buy") ,那么buy()方法实际代表的路径是
http://localhost:8080/工程路径/user/buy
2 @RequestMapping 指定请求方式
@Controller
@RequestMapping("/user")
public class UserHandler {
@RequestMapping(value = "/buy",method = {RequestMethod.GET, RequestMethod.POST})
public String buy() {
System.out.println("购买商品");
return "success";
}
}
- method 表示目标方法的请求方法,有四个选项 POST, GET, PUT, DELETE
- SpirngMVC 控制器默认支持 GET 和 POST,也就是说什么都不设置,也可以接受 GET 和 POST 请求
3 @RequestMapping 指定 params 和 headers 支持简单表达式
@RequestMapping(value = "/buy", params = "bookId")
public String buy(String bookId) {
System.out.println("购买商品");
return "success";
}
- 以上代码中,
params = "bookId"
表示请求该目标方法时,必须给一个bookId参数,具体值不做限定 buy(String bookId)
表示请求目标方法时,请求参数携带的bookId会赋值给buy所需要的形参bookId
我们可以对params
进行限制:
params = "bookId = 100"
表示必须传入bookId,且值必须是100,否则报错params = "bookId != 100"
表示必须传入bookId,且值不能是100- ``
params = {"bookId=1", "bookName"}
表示必须传入bookId和bookName,且bookId必须是1
4 @RequestMapping 支持 Ant 风格资源地址
?
表示匹配文件名中的一个字符*
表示匹配文件名中的任意字符**
表示匹配多层路径
/user/*/createUser
: 匹配/user/aaa/createUser
、/user/bbb/createUser
等 URL/user/**/createUser
: 匹配/user/createUser
、/user/aaa/bbb/createUser
等 URL/user/createUser??
: 匹配/user/createUseraa
、/user/createUserbb
等 URL
5. @RequestMapping 配合 @PathVariable 映射 URL 绑定的占位符
如果不用@PathVariable,我们在前端页面带参数的请求地址时候可能表示为user/login?name=tom&age=20
。
后端接收请求的时候采用占位符后可以写成user/login/{name}/{age}
,也就是tom会传给name,20传给age。
那么如何进行匹配呢,就需要借用@PathVariable,使用方法如代码:
@Controller
public class UserHandler {
@RequestMapping("/user/login/{name}/{age}")
public String register(@PathVariable("name") String name, @PathVariable("age") int age){
System.out.println("接收到参数--" + "username= " + name + "--" + "usrage= " + age);
return "success";
}
}
6.注意事项和使用细节
- 映射的url不能重复,比如下面代码这么设置是不被允许的
@Controller
public class UserHandler {
@RequestMapping(value = "/hi")
public String hi() {
System.out.println("hi");
return "success";
}
@RequestMapping(value = "/hi")
public String hi2() {
System.out.println("hi");
return "success";
}
}
- 请求简写形式
@RequestMapping(value = "/buy",method = RequestMethod.POST)
等价于@PostMapping(value = "/buy")
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
使用方法类似
- 参数简写
- 如下代码,请求地址hello3与方法hello3同名,并且请求地址中的参数与方法中的形参名相同,后端可以直接接收。比如对于请求地址:
localhost:9998/user/hello3?email=tom@sohu.com
,我们的方法hello3所需要的形参email可以直接接收到内容tom@sohu.com
。
- 如下代码,请求地址hello3与方法hello3同名,并且请求地址中的参数与方法中的形参名相同,后端可以直接接收。比如对于请求地址:
@GetMapping(value = "/hello3")
public String hello3(String email) {
System.out.println("hello3 " + email);
return "success";
}