- 发布日期
Web实战:部门增删改与请求参数
- 作者
- 姓名
- 缘
- 社交账号
文章目录
删除部门
删除部门的条件是部门主键 ID。
接口:
DELETE /depts?id=8
三层调用流程:
Controller
接收id
↓
Service
↓
Mapper
↓
delete from dept where id = ?
接收简单参数
Spring MVC 接收普通请求参数有几种方式。
HttpServletRequest
@DeleteMapping("/depts")
public Result delete(HttpServletRequest request) {
String idStr = request.getParameter("id");
Integer id = Integer.parseInt(idStr);
return Result.success();
}
这种方式需要手动获取参数并转换类型,比较繁琐。
@RequestParam
@DeleteMapping("/depts")
public Result delete(@RequestParam("id") Integer deptId) {
System.out.println("根据ID删除部门:" + deptId);
return Result.success();
}
@RequestParam 的 required 默认是 true。
参数名直接匹配
如果请求参数名称和方法形参名称一致,可以直接接收:
@DeleteMapping("/depts")
public Result delete(Integer id) {
System.out.println("根据ID删除部门:" + id);
return Result.success();
}
请求中的 id 与方法形参 Integer id 名称相同,Spring 可以自动完成绑定。
完成删除部门
Controller:
@DeleteMapping("/depts")
public Result delete(Integer id) {
deptService.delete(id);
return Result.success();
}
Service:
@Override
public void delete(Integer id) {
deptMapper.delete(id);
}
Mapper:
@Delete("delete from dept where id = #{id}")
void delete(Integer id);
新增部门
新增部门需要向服务器提交 JSON 数据。
请求:
POST /depts
Content-Type: application/json
请求体:
{
"name": "教研部"
}
@RequestBody
JSON 请求参数通常使用对象接收。
@PostMapping("/depts")
public Result add(@RequestBody Dept dept) {
deptService.add(dept);
return Result.success();
}
JSON 中的键名需要能够与 Java 对象属性对应。
public class Dept {
private Integer id;
private String name;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
完成新增部门
Service 中补全创建时间和修改时间:
@Override
public void add(Dept dept) {
dept.setCreateTime(LocalDateTime.now());
dept.setUpdateTime(LocalDateTime.now());
deptMapper.add(dept);
}
Mapper:
@Insert("""
insert into dept(name, create_time, update_time)
values(#{name}, #{createTime}, #{updateTime})
""")
void add(Dept dept);
修改部门:查询回显
编辑数据时,一般先根据 ID 查询当前部门信息,用于页面回显。
接口:
GET /depts/{id}
例如:
GET /depts/1
这里的 1 是 URL 路径的一部分。
@PathVariable
路径参数通过 @PathVariable 获取。
@GetMapping("/depts/{id}")
public Result getInfo(@PathVariable Integer id) {
Dept dept = deptService.getInfo(id);
return Result.success(dept);
}
对应关系:
/depts/{id}
↓
/depts/1
↓
id = 1
也可以显式指定名称:
@GetMapping("/depts/{id}")
public Result getInfo(@PathVariable("id") Integer deptId) {
Dept dept = deptService.getInfo(deptId);
return Result.success(dept);
}
多个路径参数
一个 URL 可以包含多个路径参数:
/depts/1/0
@GetMapping("/depts/{id}/{sta}")
public Result getInfo(
@PathVariable Integer id,
@PathVariable Integer sta
) {
return Result.success();
}
完成根据ID查询
Service:
@Override
public Dept getInfo(Integer id) {
return deptMapper.getById(id);
}
Mapper:
@Select("""
select id, name, create_time, update_time
from dept
where id = #{id}
""")
Dept getById(Integer id);
修改部门数据
页面修改完成后,将部门数据以 JSON 形式提交:
{
"id": 1,
"name": "教研部"
}
接口:
PUT /depts
Controller:
@PutMapping("/depts")
public Result update(@RequestBody Dept dept) {
deptService.update(dept);
return Result.success();
}
Service:
@Override
public void update(Dept dept) {
dept.setUpdateTime(LocalDateTime.now());
deptMapper.update(dept);
}
Mapper:
@Update("""
update dept
set name = #{name},
update_time = #{updateTime}
where id = #{id}
""")
void update(Dept dept);
三种常见请求参数
查询参数
请求:
/depts?id=8
接收:
public Result delete(Integer id)
或者:
public Result delete(@RequestParam("id") Integer deptId)
JSON请求体
{
"id": 1,
"name": "教研部"
}
接收:
public Result update(@RequestBody Dept dept)
路径参数
请求:
/depts/1
接收:
public Result getInfo(@PathVariable Integer id)
可以总结成:
?id=1 → 普通参数 / @RequestParam
JSON → @RequestBody
/depts/1 → @PathVariable
@RequestMapping
如果一个 Controller 中所有接口都以 /depts 开头,可以把公共路径提取到类上。
@RestController
@RequestMapping("/depts")
public class DeptController {
@GetMapping
public Result list() {
return Result.success();
}
@DeleteMapping
public Result delete(Integer id) {
return Result.success();
}
@PostMapping
public Result add(@RequestBody Dept dept) {
return Result.success();
}
@GetMapping("/{id}")
public Result getInfo(@PathVariable Integer id) {
return Result.success();
}
@PutMapping
public Result update(@RequestBody Dept dept) {
return Result.success();
}
}
完整请求路径等于:
类上的@RequestMapping + 方法上的请求路径
例如:
/depts + /{id} = /depts/{id}
部门CRUD接口汇总
| 功能 | 请求方式 | 请求路径 | 参数方式 |
|---|---|---|---|
| 查询全部部门 | GET | /depts | 无 |
| 删除部门 | DELETE | /depts?id=1 | 查询参数 |
| 新增部门 | POST | /depts | JSON请求体 |
| 根据ID查询 | GET | /depts/{id} | 路径参数 |
| 修改部门 | PUT | /depts | JSON请求体 |