Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
传统的资源操作方式 : 通过不同的参数来实现不同的效果,方法单一(post 和 get)
http://127.0.0.1/item/queryItem.action?id=1 查询,Gethttp://127.0.0.1/item/saveItem.action 新增,Posthttp://127.0.0.1/item/updateItem.action 更新,Posthttp://127.0.0.1/item/deleteItem.action?id=1 删除,Get或PostRestFul操作资源 : 可以通过不同的请求方式,来实现不同的效果! 如下 : 虽然请求的地址一样,但是功能可以不同!
http://127.0.0.1/item/1 查询,Gethttp://127.0.0.1/item 新增,Posthttp://127.0.0.1/item/ 更新,Puthttp://127.0.0.1/item/1 删除,Delete如果代码写成这样(原来的方式)那么我们在浏览器上想要调用这个test方法,就必须在url后面用问号传入参数a和b以及他们各自的值
@Controller public class RestFulController { // 传统的Url : localhost:8080/add?a=1&b=2 @RequestMapping("add") public String test ( int a, int b, Model model){ int res = a + b; model.addAttribute("msg","结果为:" + res); return "hello"; } }假设a的值为1 b的值为2(Url就会是这个样子:localhost:8080/add?a=1&b=2)
而使用RestFul风格来实现的话只需要传入参数的值就可以实现调用test方法(一定程度上简化了Url)
代码没有太多改动,只是在参数的前面加上了一个PathVariable注解并让方法参数的值绑定到了对应的Url模板变量上
@Controller public class RestFulController { // RestFul风格的Url : localhost:8080/add/1/2 @RequestMapping("add/{a}/{b}") // 在SpringMVC中使用@PatchVariable注解,让方法参数的值对应绑定到Url模板变量上 public String test1 (@PathVariable int a,@PathVariable int b, Model model){ int res = a + b; model.addAttribute("msg","结果为:" + res); return "hello"; } }只传入了对应的两个参数的值,就能够成功调用类中的test方法。:(Url是这个样子: localhost:8008/add/1/2)
RestFul除了能够改变Url,我们上面还说过可以让Url地址通过不同的请求方式来实现不同的效果,操作起来也很简单。
首先我们先来看一下如何使用注解来改变请求方式
// 用method来约束请求方式为Get(当然默认的请求方式也是Get)方式或其他。 @RequestMapping(name="add/{a}/{b}",method = RequestMethod.GET)``` // 也可以直接使用@GetMapping注解来指定,这样的话代码会显得更为简洁,效果是一样的 @GetMapping("add/{a}/{b}") // 除了Get请求方式其他的请求方式也都有对应的衍生注解,比如: @PostMapping @DeleteMapping @PutMapping // ....了解之后我们动手具体实现一下,这边我们再写一个testA方法,让之前的test的方法提交方式为Post,testA的提交方式为Get。
@Controller public class RestFulController { @PostMapping("add/{a}/{b}") public String test (@PathVariable int a,@PathVariable int b, Model model){ int res = a + b; model.addAttribute("msg","结果为:" + res); return "hello"; } @GetMapping("add/{a}/{b}") public String testA (@PathVariable int a,@PathVariable int b, Model model){ int res = a + b; model.addAttribute("msg","结果A为:" + res); return "hello"; } }打开浏览器输入 localhost:8080/add/1/2 发现走的方法是testA而不是test(因为默认的提交方式是Get,而test方法的提交方式为Post)
我们在浏览器上访问a.jsp 提交之后可以看到它走的是test方法,也就是说他的提交方式为Post,那么有意思的就来了。他的Url地址和我们之前走的testA方法是一样的(Get提交方式)
画师id : 高崎律@お仕事募集