一、RESTful 风格
1、基本介绍
-
RESTful 风格基于 HTTP 协议,强调资源的表示,即一目了然,例如,普通风格的请求
/reqUser?id=【id】
在 RESTful 风格下就是/reqUser/{【id】}
-
RESTful 风格与普通风格的差异主要体现在理念上,而编码风格差异不大,所以我们不需要有什么心理负担
2、RESTful 风格四大请求
(1)GET 请求
-
通常用于请求资源
-
通常在路径中带参
-
在 Spring Boot 中,使用
@GetMapping
或@RequestMapping(method = RequestMethod.GET)
注解来映射请求方式与请求路径 -
使用
@PathVariable
来映射请求参数
(2)POST 请求
-
通常用于提交资源
-
通常在请求体中带参
-
在 Spring Boot 中,使用
@PostMapping
或@RequestMapping(method = RequestMethod.POST)
注解来映射请求方式与请求路径 -
使用
@RequestBody
来映射请求体
(3)PUT 请求
-
通常用于修改资源
-
通常在路径中带参
-
在 Spring Boot 中,使用
@PutMapping
或@RequestMapping(method = RequestMethod.GET)
注解来映射请求方式与请求路径 -
使用
@RequestBody
来映射请求体
(4)DELETE 请求
-
通常用于删除资源
-
通常在请求体中带参
-
在 Spring Boot 中,使用
@DeleteMapping
或@RequestMapping(method = RequestMethod.DELETE)
注解来映射请求方式与请求路径 -
使用
@PathVariable
来映射请求参数
二、RESTful 风格基本使用
0、控制器
-
在 Spring Boot 中,使用
@RestController
注解定义控制器 -
使用
@RequestMapping
注解来映射请求基础路径
java
@RestController
@RequestMapping("/myRestfulTest")
public class MyRestfulTestController {}
1、GET 请求
(1)不带参
- 返回一个Staff 对象实例
java
@GetMapping("/testRestfulGet")
public Staff testRestfulGet() {
Staff staff = new Staff(1, "jack", 10);
return staff;
}
(2)带参
- 根据请求参数 id,从 Map 中返回对应的 Staff 对象
java
@GetMapping("/testRestfulGetCarryData")
public Staff testGetRestfulCarryData(@PathVariable Integer id) {
HashMap<Integer, Staff> staffMap = new HashMap<>();
staffMap.put(1, new Staff(1, "jack", 10));
staffMap.put(2, new Staff(2, "tom", 20));
staffMap.put(3, new Staff(3, "smith", 30));
return staffMap.get(id);
}
2、POST 请求
- 根据请求体 TestPostDTO 中的 id,从 Map 中返回对应的 Staff 对象
java
@PostMapping("/testRestfulPost")
public Staff testRestfulPost(@RequestBody TestPostDTO testPostDTO) {
HashMap<Integer, Staff> staffMap = new HashMap<>();
staffMap.put(1, new Staff(1, "jack", 10));
staffMap.put(2, new Staff(2, "tom", 20));
staffMap.put(3, new Staff(3, "smith", 30));
return staffMap.get(testPostDTO.getId());
}
3、PUT 请求
- 根据请求体 TestPutDTO 中的 id,找到对应的 Staff 对象,更新其年龄
java
@PutMapping("/testRestfulPut")
public String testRestfulPut(@RequestBody TestPutDTO testPutDTO) {
HashMap<Integer, Staff> staffMap = new HashMap<>();
staffMap.put(1, new Staff(1, "jack", 10));
staffMap.put(2, new Staff(2, "tom", 20));
staffMap.put(3, new Staff(3, "smith", 30));
Staff staff = staffMap.get(testPutDTO.getId());
staff.setAge(testPutDTO.getAge());
return "testPut OK";
}
4、DELETE 请求
- 根据请求参数 id,从 Map 中返回删除的 Staff 对象
java
@DeleteMapping("/testRestfulDelete")
public String testRestfulDelete(@PathVariable Integer id) {
HashMap<Integer, Staff> staffMap = new HashMap<>();
staffMap.put(1, new Staff(1, "jack", 10));
staffMap.put(2, new Staff(2, "tom", 20));
staffMap.put(3, new Staff(3, "smith", 30));
staffMap.remove(id);
return "testDelete OK";
}