SpringMVC——Restful风格
RestFul风格
概念
Restful就是一个资源定位及资源操作的风格,不是标准也不是协议。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
REST 的基本原理包括:
-
系统上的一切对象都要抽象为资源;
-
每个资源对应唯一的资源标识(URI);
-
对资源的操作不能改变资源标识(URI)本身;
-
所有的操作都是无状态的等等。
【这里备注一下URL和URI】
URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。
URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。
使用Restful操作资源:可以通过不同的请求方式来实现不同的效果,如下,请求地址一样,但对应的业务可以是不同的!
-
http://localhost:8080/commit/ 新增,POST
-
http://localhost:8080/commit/1 删除,DELETE
学习测试
-
新建一个类RestFulController
@Controller public class RestFulController{ }
-
在SpringMVC中可以使用@PathVariable注解,让方法参数的值对应绑定到一个URL模板变量上。
@Controller public class RestFulController { //映射访问路径 @RequestMapping("/commit/{p1}/{p2}") public String index(@PathVariable int p1, @PathVariable int p2, Model model){ int res = p1 + p2; //SpringMvc会自动实例化一个Model对象用于向视图传值 model.addAttribute("msg","结果为"+res); //返回视图位置 return "test"; } }
测试结果:
可以通过method约束请求的类型:
可以指定请求的类型如GET、POST、PUT、DELETE等;
测试,我们将method指定为POST:
//映射访问路径
@RequestMapping(value = "/commit/{p1}/{p2}",method = RequestMethod.POST)
再次访问该映射时,会报405错误——Method Not Allowed:
因为默认的请求方式为get,而该url约束了请求方式只能为POST;
将POST修改为GET后则能正常访问:
//映射访问路径
@RequestMapping(value = "/commit/{p1}/{p2}",method = RequestMethod.GET)
这样一来,即使是同一个请求地址,当HTTP请求方式不同时,可以对应不同的业务,如下
对于同样的请求地址/book/id,GET请求方式是根据ID查询,而DELETE请求方式是根据ID删除:
//根据ID查询书籍
@GetMapping("/book/{id}")
public String toUpdateBook(@PathVariable Integer id, Model model){
Books books = bookService.queryBookById(id);
model.addAttribute("qBook",books);
return "queryBook";
}
//根据ID删除书籍
@DeleteMapping("/book/{id}")
public String deleteBook(@PathVariable Integer id){
System.out.println("deleteBookId=>"+id);
bookService.deleteBook(id);
return "redirect:/books/allBooks";
}
小结:
SpringMVC的@RestMapping注解能够处理HTTP请求的方法,如GET、POST、PUT、DELETE以及PATCH;
所有的地址栏请求默认都会是HTTP GET;
方法级别的注解变体有如下几个:组合注解
@GetMapping
@PostMapping
@PutMapping
@PatchMapping
@DeleteMapping
@GetMapping是一个组合注解
它代表的是@RequestMapping(method = RequestMethod.GET)的组合