目录
区别@RequestBody,@Requestparm和@PathVariable
REST(Representational State Transfer) 表现形式状态转换
REST其实就是资源访问路径的一种格式。也可以当成对资源访问路径的书写规范。
之所以说是可以当成,其实REST并不称自己是一种规范而是风格,因为REST刚出来的时候,使用者还不习惯REST风格的写法, 到后来大家都觉得REST风格书写简便,大家都默默规定了这种书写形式。所有可以说是可以当成一种规范来看待。
作用:根据REST规定的形式书写访问路径,书写更简单,访问信息更隐蔽。
根据REST风格对资源进行访问称为RESTful
核心:按照REST风格访问资源时使用行为动作来区分对资源进行了何种操作。
例如现在有book表作为资源,访问路径格式如下 :
访问路径 | 行为动作 | 说明 |
http://localhost/books | GET(查询) | 查询全部图书信息 |
http://localhost/books/1 | GET(查询) | 查询指定图书信息 |
http://localhost/books | POST(新增/保存) | 添加图书信息 |
http://localhost/books | PUT(修改/更新) | 修改图书信息 |
http://localhost/books/1 | DELETE(删除) | 删除指定图书信息 |
说明:不用在意写法,格式就是按照行为动作来指定该路径想要实现的功能。我们可以在对应路径Servlet下实现对应功能。后面跟着的数字/参数,我们称为路径参数。Servlet接收参数时,只要声明在方法参数中,方法体引用即可。
案例只使用表现层作为测试。不关联业务层和数据层。
- @RestController
- @RequestMapping(value = "/books",produces = "application/json; charset=utf-8" )
- public class BookController {
-
- @GetMapping()
- public String getAll(){
- System.out.println("getAll...");
- return "获取所有信息...";
- }
-
- @GetMapping("/{id}")
- public String selectById(@PathVariable int id){
- System.out.println("selectById..."+ id);
- return "根据id查询单个信息...";
- }
-
- @PostMapping()
- public String save(){
- System.out.println("save...");
- return "保存成功...";
- }
-
- @DeleteMapping("/{id}")
- public String delete(@PathVariable int id){
- System.out.println( id +"..delete.." );
- return "删除成功...";
- }
- }
1.@RestController复合注释:结合和@ResponseBody和@Controller两个注释。@ResponseBody声明后可响应数据,@Controller声明为表现层加载bean。
2.@RequestMapping注释:声明Servlet的访问路径,还可设置编码,解决乱码问题。
3. @GetMapping、@PostMapping...看作行为动作,配合@RequestMapping,就可以知道访问路径想要做些什么了。
4.值得注意的是:如果带有路径参数,则需要参考使用案例代码中的DeleteMapping("/{id}")方式书写,记得方法需要使用参数接收后使用路径参数,路径参数名和方法形参名要一致。
5.如果需要使用路径参数,记得在参数写注解@PathVariable。
我们如果使用浏览器直接访问,只能使用GET行为动作,不能满足测试要求,所以我们选择一款接口测试工具"PostMan"。可以模拟任意请求方式,符合代码测试需求。
1.先将Tomcat跑起来
2.PostMan接口测试
测试不带路径参数的GET
结果
测试带路径参数的GET
结果
测试POST
在上方案例可以看到,路径参数使用了注解@PathVariable,表示参数可以接收路径参数,但是如果接收的是url参数或是json数据的话,@PathVariable就不可用了。那应该用什么呢?
1.@RequestBody用来接收json数据。
2.@Requestparm用来接收url地址传参或表单传参。
3.@PathVariable用来接收路径参数
三种接收方式各有不同,最常用的是@RequestBody,因为前后端传参基本是以json的数据格式进行传输,如果使用非json数据传输,可以考虑使用@Requestparm,参数简单且较少,可以考虑使用路径参数,例如传ID值。