商品分类模块开发笔记
模块功能概述
- 实现分类数据的 增删改查 功能
- 核心难点:
- 分类的父子级目录结构
- 递归实现多级分类查找
- 列表展示顺序控制(从父级向子级递归)
接口说明
后台接口
1. 添加分类
-
请求地址:
/admin/category/add
-
请求方法: POST
-
参数:
参数名 类型 说明 name String 分类名称(如:新鲜水果) type Int 分类层级(1-3级) parentId Int 父级ID(0表示无父级) orderNumber Int 同级目录排序号 -
示例请求:
{
"name": "进口水果",
"type": 2,
"parentId": 1,
"orderNumber": 2
}
2. 更新分类
- 请求地址:
/admin/category/update
- 请求方法: POST
- 参数:
- 包含
id
字段用于指定要修改的分类 - 其他参数与添加接口相同
- 包含
3. 删除分类
- 请求地址:
/admin/category/delete
- 请求方法: POST
- 参数:
参数名 类型 说明 id Int 分类ID
4. 分类列表(平铺分页)
- 请求地址:
/admin/category/list
- 请求方法: GET
- 参数:
参数名 类型 说明 pageNumber Int 当前页码 pageSize Int 每页显示条数
前台接口
递归分类列表
- 请求地址:
/category/list
- 请求方法: GET
- 响应结构:
{
"code": 200,
"message": "成功",
"data": [
{
"id": 1,
"name": "新鲜水果",
"childCategory": [
{
"id": 2,
"name": "进口水果",
"childCategory": [
{
"id": 3,
"name": "车厘子"
}
]
}
]
}
]
}
数据库设计
表名: category
字段名 | 类型 | 说明 |
---|---|---|
id | int(11) | 主键ID |
name | varchar(64) | 分类名称 |
type | int(11) | 分类层级(1-3级) |
parent_id | int(11) | 父级分类ID |
order_number | int(11) | 排序号 |
create_time | datetime | 创建时间 |
update_time | datetime | 最后更新时间 |
关键实现点
-
递归查询算法:
- 通过
parent_id
字段建立层级关系 - 使用深度优先搜索实现树形结构构建
- 通过
-
排序控制:
- 同级分类通过
order_number
字段排序 - 层级间展示顺序为父级->子级
- 同级分类通过
-
层级校验:
- 新增分类时校验层级不超过3级
- 更新操作时防止循环引用
商品分类模块开发笔记 - 接口实现篇
Controller层实现
1. 创建Controller
java">@RestController
public class CategoryController {
@Autowired
private CategoryService categoryService;
@Autowired
private UserService userService;
}
2. 添加分类接口实现
java">@PostMapping("/admin/category/add")
@ResponseBody
public ApiRestResponse addCategory(HttpSession session,
@RequestBody AddCategoryRequest addCategoryRequest) {
// 参数校验
if (addCategoryRequest.getName() == null
|| addCategoryRequest.getType() == null
|| addCategoryRequest.getParentId() == null
|| addCategoryRequest.getOrderNumber() == null) {
return ApiRestResponse.error(ExceptionEnum.PARAM_NOT_NULL);
}
// 用户登录校验
User currentUser = (User) session.getAttribute(UserConstant.LOGIN_USER);
if (currentUser == null) {
return ApiRestResponse.error(ExceptionEnum.NEED_LOGIN);
}
// 管理员权限校验
boolean isAdmin = userService.checkAdminRole(currentUser);
if (!isAdmin) {
return ApiRestResponse.error(ExceptionEnum.NEED_ADMIN);
}
// 创建分类对象
Category category = new Category();
BeanUtils.copyProperties(addCategoryRequest, category);
// 调用Service层
return categoryService.addCategory(category);
}
请求参数对象设计
java">public class AddCategoryRequest {
private String name;
private Integer type;
private Integer parentId;
private Integer orderNumber;
// Getter & Setter
// Lombok @Data 注解可替代
}
校验机制说明
1. 参数校验策略
- 必要性校验:所有必要字段的非空检查
- 安全校验:使用独立Request对象防止额外字段注入
- 层级校验:通过type字段控制分类层级(1-3级)