四、RestFul风格
1.概念
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lX6wSuMO-1669691440664)(C:\Users\78153\Desktop\新建文本文档.assets\5b826968b6af4a1ca1d2ceb402e7e7b2.png)]
2.功能
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用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
相比于传统方式使用链接来访问请求,Resful可以通过使用通过不同的请求方式来达到不同的效果
3.基本使用
①:传统的方式
@Controller()
@RequestMapping("/rest")
public class RestFulController {
@RequestMapping("/test.do")
public String test(int a, int b, Model model){
int rust = a + b;
model.addAttribute("msg","结果="+rust);
// 配置了视图解析器后,写法
return "suc";
}
}
访问的url
http://localhost:8080/SpringMVC/rest/test.do?a=1&b=1
返回结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y2QNMMae-1669691440665)(C:\Users\78153\Desktop\新建文本文档.assets\b6e32fbf35ec4c008081698b81bdd5f2.png)]
②:RestFul风格
controller
//映射访问路径
@RequestMapping("/commit.do/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable String p2, Model model){
String result = p1+p2;
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "结果:"+result);
//返回视图位置
return "suc";
}
url
http://localhost:8080/SpringMVC/rest/commit.do/1/1
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8DwcO9VZ-1669691440666)(C:\Users\78153\Desktop\新建文本文档.assets\5e4122a79c0b45e682922d2aed3ea6a5.png)]
4.使用method属性指定请求类型
用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等
我们来测试一下:
//映射访问路径,必须是POST请求
@RequestMapping(value = "/hello",method = {RequestMethod.POST})
public String index2(Model model){
model.addAttribute("msg", "hello!");
return "test";
}
我们使用浏览器地址栏进行访问默认是Get请求,会报错405:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N0KtlngM-1669691440667)(C:\Users\78153\Desktop\新建文本文档.assets\920e72fd32524f7b9c381d98ebe2a11e.png)]
如果将POST修改为GET则正常了
//映射访问路径,必须是POST请求
@RequestMapping(value = "/hello",method = {RequestMethod.GET})
public String index2(Model model){
model.addAttribute("msg", "hello!");
return "suc";
}
Spring MVC 的 @RequestMapping 注解能够处理 HTTP 请求的方法, 比如 GET, PUT, POST, DELETE 以及 PATCH。
所有的地址栏请求默认都会是 HTTP GET 类型的。
方法级别的注解变体有如下几个:组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@GetMapping 是一个组合注解,平时使用的会比较多!
它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。