文章目录
1、简介
REST(Representational State Transfer), 表现形态状态转换。而REST风格是一种约定方式,约定不是规范,打破,因此被称为REST风格,而不是REST规范。描述模块的名称通常使用复数,也就是加s的格式描述,表示此类资源,而不是单个资源。
- 传统风格资源描述形式
- http://localhost/user/getById?id=1
- http://localhost/user/saveUser
- REST风格描述形式
- http://localhost/user/1
- http://localhost/user
按照REST风格访问资源时使用行为动作区分对资源进行了一下几种操作,在REST中主要使用不同的行为动作来区分相同或相似的地址。
地址 | 描述 | 行为动作(请求方式) |
---|---|---|
http://localhost/users | 查询全部用户信息 | GET(查询) |
http://localhost/users/1 | 查询指定用户信息 | GET(查询) |
http://localhost/users | 添加用户信息 | POST(新增/保存) |
http://localhost/users | 修改用户信息 | PUT(修改/更新) |
http://localhost/users/1 | 删除用户信息 | DELETE(删除) |
根据REST风格对资源进行访问称为RESTful,这主要有以下优点:
- 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
- 书写简化
2、代码操作
在下面将通过一个简单的代码根据REST风格进行修改,对REST风格做一个进一步的了解,在练习之前首先得准备好项目结构,如配置注释扫描、核心控制器DispathcerServlet的配置
2.1、原始代码
@Controller
@RequestMapping("/book")
public class BookController {
@ResponseBody
@RequestMapping("/save")
public String save() {
System.out.println("saving is running……");
return "model: saving is running……";
}
@ResponseBody
@RequestMapping("/delete")
public String delete() {
System.out.println("deleting is running……");
return "model: deleting is running……";
}
@ResponseBody
@RequestMapping("/update")
public String update(User user) {
System.out.println("updating is running……" + user);
return "model: updating is running……" + user;
}
@ResponseBody
@RequestMapping("/getById")
public String getById(int id) {
System.out.println("getById is running……" + id);
return "model: getById is running……" + id;
}
}
2.2、REST风格修改
@Controller
@ResponseBody
@RequestMapping("/book")
public class BookController {
@RequestMapping(method = RequestMethod.POST)
public String save() {
System.out.println("saving is running……");
return "model: saving is running……";
}
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable int id) {
System.out.println("deleting is running……" + id);
return "model: deleting is running……" + id;
}
@RequestMapping(value = "/{user}}", method = RequestMethod.PUT)
public String update(@PathVariable User user) {
System.out.println("updating is running……" + user);
return "model: updating is running……" + user;
}
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public String getById(@PathVariable int id) {
System.out.println("getById is running……" + id);
return "model: getById is running……" + id;
}
}
2.3、代码简化
这时我们可以发现,类外面有三个注解**@Controller、@ResponseBody、 @RequestMapping**,这可以用**@RestController**代替其中的 @Controller和@ResponseBody,同时将类中的POST等请求改为相应注解
@RestController
@RequestMapping("/book")
public class BookController {
// @RequestMapping(method = RequestMethod.POST)
@PostMapping
public void save() {
System.out.println("saving is running……");
// return "model: saving is running……";
}
// @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@DeleteMapping(("/{id}"))
public String delete(@PathVariable int id) {
System.out.println("deleting is running……" + id);
return "model: deleting is running……" + id;
}
// @RequestMapping(value = "/{user}}", method = RequestMethod.PUT)
@PutMapping("/{user}")
public String update(@PathVariable User user) {
System.out.println("updating is running……" + user);
return "model: updating is running……" + user;
}
// @RequestMapping(value = "/{id}", method = RequestMethod.GET)
@GetMapping("/{id}")
public String getById(@PathVariable int id) {
System.out.println("getById is running……" + id);
return "model: getById is running……" + id;
}
}
3、注解分析
3.1、@RequestMapping
该注解为方法注解,一般位于SpringMVC控制器方法定义的上方,主要用于设置当前控制器方法请求访问路径。
- value(默认):请求访问路径
- method:http请求动作,标准动作主要有GET/POST/PUT/DELETE
3.2、@PathVariable
该注解为形参注解,一般位于SpringMVC控制器方法形参定义的前面,主要用于绑定路径参数与处理器方法形参间的关系,要求路径参数名和形参名一致。
3.3、常用注解区别
在SpringMVC控制器中常见且相似的注解有 @RequestBody、@RequestParam 和 @PathVariable,他们主要有以下区别:
- @RequestBody 用于接受json数据
- @RequestParam 用于接受 url 地址传参或表单传参
- @PathVariable 用于接受路径参数,使用
{参数名称}
描述路径参数
各自适合的应用场景如下:
- 后期开发中,发送请求参数超过 1 个时,以json格式为主,@RequestBody 应用较广
- 如果发送非 json 格式数据,选用 @RequestParam 接受请求参数
- 采用 RESTful 进行开发,当参数数量较少时,例如 1 个,可以采用 @PathVariable 接受请求路径变量,通常用于传递 id 值
今天的文章Rest风格浅析分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/8717.html