概念
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,==只是一种风格==,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。(掘金不支持高亮我哭惹,那以后尽量不写高亮吧)
功能
- 资源 : 互联网所有的事物都可以被抽象为资源
- 资源操作 : 使用Post、Delete、Put、Get,使用不同的方法对资源进行操作
- 分别对应 : 添加、删除、修改、查询。
传统的资源操作方式 : 通过不同的参数来实现不同的效果,方法单一(post 和 get)
- http://127.0.0.1/item/queryItem.action?id=1 查询,Get
- http://127.0.0.1/item/saveItem.action 新增,Post
- http://127.0.0.1/item/updateItem.action 更新,Post
- http://127.0.0.1/item/deleteItem.action?id=1 删除,Get或Post
RestFul操作资源 : 可以通过不同的请求方式,来实现不同的效果! 如下 : 虽然请求的地址一样,但是功能可以不同!
- http://127.0.0.1/item/1 查询,Get
- http://127.0.0.1/item 新增,Post
- http://127.0.0.1/item/ 更新,Put
- http://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文件,让它走post提交方法(a和b的值分别为1和2已经写死)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/add/1/2" method="post">
<input type="submit">
</form>
</body>
</html>
我们在浏览器上访问a.jsp
提交之后可以看到它走的是test方法,也就是说他的提交方式为Post,那么有意思的就来了。他的Url地址和我们之前走的testA方法是一样的(Get提交方式)
到这里我们就完成了同一个Url地址,走两种不同的提交方式,实现了Url的复用,也就是我们前面提到的这一点。
那么,到这里RestFul的初步认识就结束了,各位感兴趣的话可以自己尝试一下,玩出点新花样~~~~
原图p站地址 : www.pixiv.net/artworks/84…
画师id : 高崎律@お仕事募集