ResuFul就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这种风格设计的软件可以更简洁、更有层次,更易于实现缓存等机制。
资源
- 资源:互联网的所有事物都可以被抽象为资源
- 资源操作:使用POST、DELETE、PUT、GET
- 分别对应添加、删除、修改、查询
使用RESTful操作资源,可以通过不同的请求方式来实现不同的效果!
例子
不使用RestFul风格的时候
public class RestFulController {
@RequestMapping("/add")
public String test1(int a,int b,Model model){
int res = a + b;
model.addAttribute("msg","结果为:"+res);
return "test";
}
}
URL地址为:http://localhost:8080/springmvc_05_controller_war_exploded/add?a=1&&b=2
在SpringMVC中可以使用@PathVariable注解,让方法参数的值对应绑定一个URL模板变量上。
@Controller
public class RestFulController {
@RequestMapping("/add/{a}/{b}")
public String test1(@PathVariable int a, @PathVariable int b, Model model){
int res = a + b;
model.addAttribute("msg","结果为:"+res);
return "test";
}
}
然后访问的URL地址就可以变为
http://localhost:8080/springmvc_05_controller_war_exploded/add/1/2
明显好看了不少。
使用method属性指定请求类型
用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET,POST,OPTIONS,PUT,PATCH,DELETE,TRACE等。
@Controller
public class RestFulController {
@RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.POST)
public String test1(@PathVariable int a, @PathVariable int b, Model model){
int res = a + b;
model.addAttribute("msg","结果为:"+res);
return "test";
}
}
这样写后就只允许通过POST的方式来访问这个方法。如果是其他方式就会报405错误
浏览器默认就是使用get请求方式。
方法级别的注解有几个变体
@GETMapping
@POSTMapping
等
// @RequestMapping(value = "/add/{a}/{b}",method = RequestMethod.POST)
//就可以替换成
@PostMapping("/add/{a}/{b}")
如果有两个相同的URL地址,但是请求方式不同呢
@PostMapping("/add/{a}/{b}")
public String test1(@PathVariable int a, @PathVariable int b, Model model){
int res = a + b;
model.addAttribute("msg","结果为:"+res);
return "test";
}
@GetMapping("/add/{a}/{b}")
public String test2(@PathVariable int a, @PathVariable int b, Model model){
int res = a + b;
model.addAttribute("msg","结果为:"+res);
return "test";
}
那么也就是说相同的URL执行的操作是可以不一样的,根据它的请求方式来执行不同的方法。URL的复用