执行流程
一、@RequestMapping注解
这个注解既可以类上,也可以写在方法上。例如:
@RequestMapping(value = "/user")
@Controller //UserHandler就是一个处理器/控制器,注入到容器
public class UserHandler {
/**
* 老韩解读
* 1. method=RequestMethod.POST: 表示请求buy目标方法必须是 post
* 2. RequestMethod 四个常用选项 POST, GET, PUT, DELETE[后面我们会详解]
* 3. SpringMVC 控制器默认支持GET和POST两种方式
* 4. buy()方法请求的url: http://ip:port/工程路径/user/buy
* 5. @PostMapping(value = "/buy")等价 @RequestMapping(value = "/buy",method = RequestMethod.POST)
* @return
*/
@RequestMapping(value = "/buy",method = RequestMethod.POST)
public String buy() {
System.out.println("购买商品~");
return "success";
}
}
注意点:
(1)方法上的@RequestMapping中的method如果省略不写,则此方法则默认支持GET和POST请求;
(2)@RequestMapping中如果只有一个路径值,则value可以省略不写;
(3)@RequestMapping可以通过params属性来规定请求中必须携带的参数,例如:
/**
* 老韩解读
* 1. params="bookId" 表示请求该目标方法时,必须给一个bookId参数, 值没有限定
* 2. search(String bookId): 表示请求目标方法时, 携带的bookId=100, 就会将请求携带的 bookId对应的值 100, 赋给 String bookId
* 3. 如果写成params = "bookId=100" 表示必须给一个bookId参数, 而且值必须是100
*
* @return
*/
@RequestMapping(value = "/find", params = "bookId", method = RequestMethod.GET)
public String search(String bookId) {
System.out.println("查询书籍 bookId= " + bookId);
return "success";
}
(4)@RequestMapping支持通配符资源路径,
? 表示匹配文件名中的一个字符
*表示匹配文件名中的任意字符
**表示匹配多层路径
例如:
/**
*
* 1. @RequestMapping(value = "/message/**") /** 可以匹配多层路径,例如路径/message/aa,/message/aa/bb,都可以匹配到该方法。
*/
@RequestMapping(value = "/message/**")
public String im() {
System.out.println("发送消息");
return "success";
}
二、REST风格
亚马逊官方对于REST风格的描述
REST风格是前后端达成的一种共识,充分利用了HTTP的优势。Springmvc中使用相关注解可以实现REST风格的接口。
(1)获取数据
//查询[GET]
@RequestMapping(value = "/book/{id}", method = RequestMethod.GET)
public String getBook(@PathVariable("id") String id) {
System.out.println("查询书籍 id=" + id);
return "success";
}
(2)增加数据
//添加[POST]
@PostMapping(value = "/book")
public String addBook(String bookName) {
System.out.println("添加书籍 bookName== " + bookName);
return "success";
}
(3)修改数据
//修改[PUT]
@PutMapping(value = "/book/{id}")
public String updateBook(@PathVariable("id") String id) {
System.out.println("修改书籍 id=" + id);
return "redirect:/user/success";
}
(4)删除数据
//删除[DELETE]
@RequestMapping(value = "/book/{id}", method = RequestMethod.DELETE)
public String delBook(@PathVariable("id") String id) {
System.out.println("删除书籍 id= " + id);
return "redirect:/user/success";
}
注意点:为什么要使用@PathVariable注解?
答:映射URL绑定的占位符,在前端发送请求的时候,就可以不用携带参数的名字,只需要携带参数的值就行,这样更加简洁。同时注意@PathVariable中的值要和@RequestMapping中绑定的参数占位符的值相对应。