当前位置: 首页 > news >正文

第25周JavaSpringboot实战-电商项目 4.商品分类管理

商品分类模块开发笔记

模块功能概述

  • 实现分类数据的 增删改查 功能
  • 核心难点:
    • 分类的父子级目录结构
    • 递归实现多级分类查找
    • 列表展示顺序控制(从父级向子级递归)

接口说明

后台接口

1. 添加分类
  • 请求地址: /admin/category/add

  • 请求方法: POST

  • 参数:

    参数名类型说明
    nameString分类名称(如:新鲜水果)
    typeInt分类层级(1-3级)
    parentIdInt父级ID(0表示无父级)
    orderNumberInt同级目录排序号
  • 示例请求:

{
  "name": "进口水果",
  "type": 2,
  "parentId": 1,
  "orderNumber": 2
}
2. 更新分类
  • 请求地址: /admin/category/update
  • 请求方法: POST
  • 参数:
    • 包含id字段用于指定要修改的分类
    • 其他参数与添加接口相同
3. 删除分类
  • 请求地址: /admin/category/delete
  • 请求方法: POST
  • 参数:
    参数名类型说明
    idInt分类ID
4. 分类列表(平铺分页)
  • 请求地址: /admin/category/list
  • 请求方法: GET
  • 参数:
    参数名类型说明
    pageNumberInt当前页码
    pageSizeInt每页显示条数

前台接口

递归分类列表
  • 请求地址: /category/list
  • 请求方法: GET
  • 响应结构:
{
  "code": 200,
  "message": "成功",
  "data": [
    {
      "id": 1,
      "name": "新鲜水果",
      "childCategory": [
        {
          "id": 2,
          "name": "进口水果",
          "childCategory": [
            {
              "id": 3,
              "name": "车厘子"
            }
          ]
        }
      ]
    }
  ]
}

数据库设计

表名: category

字段名类型说明
idint(11)主键ID
namevarchar(64)分类名称
typeint(11)分类层级(1-3级)
parent_idint(11)父级分类ID
order_numberint(11)排序号
create_timedatetime创建时间
update_timedatetime最后更新时间

关键实现点

  1. 递归查询算法

    • 通过parent_id字段建立层级关系
    • 使用深度优先搜索实现树形结构构建
  2. 排序控制

    • 同级分类通过order_number字段排序
    • 层级间展示顺序为父级->子级
  3. 层级校验

    • 新增分类时校验层级不超过3级
    • 更新操作时防止循环引用

商品分类模块开发笔记 - 接口实现篇

Controller层实现

1. 创建Controller

@RestController
public class CategoryController {

    @Autowired
    private CategoryService categoryService;
    
    @Autowired
    private UserService userService;
}

2. 添加分类接口实现

@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);
}

请求参数对象设计

public class AddCategoryRequest {
    private String name;
    private Integer type;
    private Integer parentId;
    private Integer orderNumber;

    // Getter & Setter
    // Lombok @Data 注解可替代
}

校验机制说明

1. 参数校验策略

  • 必要性校验:所有必要字段的非空检查
  • 安全校验:使用独立Request对象防止额外字段注入
  • 层级校验:通过type字段控制分类层级(1-3级)

2. 权限校验流程

失败
成功
未登录
已登录
非管理员
管理员
请求入口
参数校验
返回参数错误
登录状态
返回登录提示
管理员校验
返回权限不足
执行添加操作

相关文章:

  • python多线程开发
  • Linux云计算SRE-第十五周
  • Deep Seek-编码器
  • KubeSphere部署redis集群
  • JavaScript 简单类型与复杂类型-堆和栈
  • 跨平台文本实时传输
  • 反应扩散方程组数值解
  • 如何去除word页眉上面的横线
  • 【实战 ES】实战 Elasticsearch:快速上手与深度实践-1.1.1对比传统数据库与搜索引擎(MySQL vs ES)
  • 分治——归并排序算法题
  • 音乐游戏Drummania(GITADORA)模拟器
  • python面向对象
  • Android数据库SQLite、Room、Realm、MMKV/DataStore、ObjectBox性能比较
  • MySql:Authentication plugin ‘caching sha2 password‘ cannot be loaded
  • 二叉树-二叉树的所有路径
  • 【前端基础】Day 2 HTML
  • 玩转Docker | 使用Docker部署IT-tools工具箱
  • 【C++】list
  • 力扣 下一个排列
  • 东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急
  • 网站建设 中国移动/拉新推广平台
  • 做网站一般都是那些人 会做/360优化大师官方下载手机
  • 自己做的网站怎样赚钱吗/合肥网站排名提升
  • 在线建设房屋设计网站/磁力宝
  • 网站的站内结构锚文本是如何做的/软件开发外包公司
  • 招聘网站建设人员条件/怎样推广自己的产品