第25周JavaSpringboot实战-电商项目 4.商品分类管理
商品分类模块开发笔记
模块功能概述
- 实现分类数据的 增删改查 功能
- 核心难点:
- 分类的父子级目录结构
- 递归实现多级分类查找
- 列表展示顺序控制(从父级向子级递归)
接口说明
后台接口
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
@RestController
public class CategoryController {@Autowiredprivate CategoryService categoryService;@Autowiredprivate 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. 权限校验流程
相关文章:
第25周JavaSpringboot实战-电商项目 4.商品分类管理
商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点: 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制(从父级向子级递归) 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …...
C语言--正序、逆序输出为奇数的位。
题目: 采用正序和逆序分别输出为奇数的位。例如输入12345,正序输出135,逆序输出531 代码: #include <stdio.h>void printOddDigits(int num) {int res 0;int divider 10;while (num / divider > 10) {divider * 10;…...
C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载
下载地址<------完整源码 在数字化转型加速的背景下,企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台,其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下,C#开发者需要耗费大…...
H13-821 V3.0 HCIP 华为云服务架构题库
华为云上哪个服务能够用于收集来自主机和云服务的日志数据,并通过海量日志数据的分析与处理帮助开发或运维人员进行问题定位和分析? A:云监控服务 B:云日志服务 C:云审计服务 D:对象存储服务 答案ÿ…...
Linux主机用户登陆安全配置
Linux主机用户登陆安全配置 在Linux主机上进行用户登录安全配置是一个重要的安全措施,可以防止未经授权的访问。以下是如何创建用户hbu、赋予其sudo权限,以及禁止root用户SSH登录,以及通过ssh key管理主机用户登陆。 创建用户hbu 使用具有…...
提升数据洞察力:五款报表软件助力企业智能决策
概述 随着数据量的激增和企业对决策支持需求的提升,报表软件已经成为现代企业管理中不可或缺的工具。这些软件能够帮助企业高效处理数据、生成报告,并将数据可视化,从而推动更智能的决策过程。 1. 山海鲸报表 概述: 山海鲸报表…...
Linux | man 手册使用详解
注:本文为 “Linux man 手册” 相关文章合辑。 略作重排。 man 手册常用命令 1. 查看和搜索手册页 查看特定软件包的手册页,并使用 grep 命令过滤出包含特定关键字的行: man <package> | grep <keyword>在整个系统的手册页中…...
安全见闻4
今天学了Windows操作系统和驱动程序的相关知识 Windows注册表 注册表是windows系统中具有层次结构的核心数据库 储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。 打开注册表编辑器…...
项目实战--网页五子棋(匹配模块)(4)
上期我们完成了游戏大厅的前端部分内容,今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后,我们可以维护好用户的websocket会话,把用户表示为在线状态,方便获取到用户的websocket会话 package org.ting.j20250110_g…...
P8716 [蓝桥杯 2020 省 AB2] 回文日期
1 题目说明 2 题目分析 暴力不会超时,O(n)的时间复杂度, < 1 0 8 <10^8 <108。分析见代码: #include<iostream> #include<string> using namespace std;int m[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};// 判断日期…...
如何在视频中提取关键帧?
在视频处理中,提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python,结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳:FFmpeg是一个强大的视频处理工具,可以通过命令行获取…...
為什麼使用不限量動態住宅IP採集數據?
在瞭解“不限量動態住宅IP數據採集”之前,我們需要先搞清楚什麼是“動態住宅IP”。簡單來說,動態IP是一種會定期變化的IP地址,通常由互聯網服務提供商(ISP)分配給家庭用戶。與固定IP(靜態IP)不同…...
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
在Go中使用Viper将YAML配置绑定到结构体时,主要依赖 mapstructure 标签(而非 json 或 yaml 标签)实现字段名映射。 --- ### 1. **基础绑定方法** 使用 viper.Unmarshal(&config) 或 viper.UnmarshalKey("key", &subConfi…...
OpenIPC开源FPV之Adaptive-Link安装
OpenIPC开源FPV之Adaptive-Link安装 1. 源由2. 介绍2.1 天空端安装2.2 地面端安装 3. 问题汇总3.1 安装脚本问题3.2 网络安装问题3.3 非SSC30KQ/SSC338Q硬件3.4 代码疑问 4. 总结5. 后续 1. 源由 鉴于飞行过程,发现一些马赛克现象,且60FPS桌面30FPS的录…...
[杂学笔记]OSI七层模型作用、HTTP协议中的各种方法、HTTP的头部字段、TLS握手、指针与引用的使用场景、零拷贝技术
1.OSI七层模型作用 物理层:负责光电信号的传输,以及将光电信号转化为二进制数据数据链路层:主要负责将收到的二进制数据进一步的封装为数据帧报文。同时因为数据在网络中传递的时候,每一个主机都能够收到报文数据,该层…...
RK3568开发笔记-AD7616调试笔记
目录 前言 一、AD7616介绍 高分辨率 高速采样速率 宽模拟输入范围 集成丰富功能 二、原理图连接 三、设备树配置 四、内核驱动配置 五、AD芯片测试 总结 前言 在嵌入式数据采集领域,将模拟信号精准转换为数字信号至关重要。AD7616 作为一款性能卓越的 16 位模数转换器…...
Unity摄像机与灯光相关知识
一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件,例如用Cube对象来举例 1.Sphere(Mesh)组件: 用来决定对象的网格属性,例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件: 用来设置…...
AI前端革新金融风控:ScriptEcho助力高效开发
1. 引言:金融风控的挑战与前端效率需求 在当今快速变化的金融环境中,风险评估和反欺诈已成为金融机构运营的核心。金融风控不仅关乎企业的盈利能力,更直接影响着整个金融体系的稳定。一个强大的风控系统需要能够实时监控、分析并预测潜在的风…...
STM32--SPI通信讲解
前言 嘿,小伙伴们!今天咱们来聊聊STM32的SPI通信。SPI(Serial Peripheral Interface)是一种超常用的串行通信协议,特别适合微控制器和各种外设(比如传感器、存储器、显示屏)之间的通信。如果你…...
CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?
前言:这里只说js用的CryptoJS库里的相关内容,只用js来进行代码操作和讲解。 这里网上相关的帖子很少,不得已问了很长时间AI 想引用CryptoJS库情况分两种,一种是html引用,另一种是在Nodejs里引用。 一、引用CryptoJS库…...
转行AI Agent的真实成本:时间、金钱与精力
建议按照我下面的办法来做,不一定能让你成为LLM专家,但一定能帮你快速入门,少走弯路。 1.先把模型“用顺”一上来别纠结框架、工程化这些,第一件事是能稳定调用一个模型,让它按你想要的格式输出结果。很多人卡在这里&a…...
3招轻松搞定微信防撤回失效难题,让你的消息不再“消失“
3招轻松搞定微信防撤回失效难题,让你的消息不再"消失" 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https://…...
ACPL-M61U-500E,宽温高共模抑制比高速数字光耦合器
简介今天我要向大家介绍的是 Broadcom 的数字光耦合器——ACPL-M61U-500E。它是一款单通道高速逻辑门光耦合器,采用紧凑型、兼容自动插入的5引脚SO-5表面贴装封装。该器件内部通过绝缘层将AlGaAs发光二极管与集成高增益光探测器进行电隔离,输出端为开路集…...
基于LFM2.5-1.2B-Thinking-GGUF的智能Agent设计:自动化任务编排与执行
基于LFM2.5-1.2B-Thinking-GGUF的智能Agent设计:自动化任务编排与执行 1. 智能Agent如何改变工作方式 想象一下,你早上刚到办公室,电脑上的智能助手已经自动完成了这些工作:检查了昨晚的邮件,筛选出重要内容并生成摘…...
告别Gazebo/Rviz模型‘隐身术’:一个虚拟关节(dummy link)如何解决URDF惯性参数报错
机械臂仿真进阶:巧用虚拟关节解决URDF惯性参数兼容性问题 在机械臂开发过程中,URDF(Unified Robot Description Format)作为ROS生态中的标准机器人描述格式,承载着模型结构、运动学和动力学参数等重要信息。然而&#…...
HC-05蓝牙模块AT模式配置全攻略:用STM32CubeIDE的串口调试功能搞定(免USB转TTL)
HC-05蓝牙模块AT模式配置全攻略:用STM32CubeIDE的串口调试功能搞定(免USB转TTL) 当你手头只有一块STM32开发板和HC-05蓝牙模块,却需要快速配置模块参数时,传统方法要求额外的USB转TTL工具往往成为绊脚石。本文将揭示如…...
WeChatExporter:解锁iOS微信聊天记录的数字记忆宝库
WeChatExporter:解锁iOS微信聊天记录的数字记忆宝库 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因误删微信对话而懊悔不已?是否担心手…...
Vue3企业级后台管理系统架构深度解析:vue-admin-box实战剖析
Vue3企业级后台管理系统架构深度解析:vue-admin-box实战剖析 【免费下载链接】vue-admin-box vue3,vite,element-plus中后台管理系统,集成四套基础模板,大量可利用组件,模板页面 项目地址: https://gitcode.com/gh_mirrors/vu/v…...
普惠不是简化:从三大基础理论推导非技术用户的独立AI协作路径
普惠不是简化:从三大基础理论推导非技术用户的独立AI协作路径 摘要 当前AI普惠领域普遍陷入“简化版误区”:行业将非技术用户的AI工具定义为“技术用户IDE的降维简化版”,通过砍掉高级功能、简化操作界面实现所谓的“普惠”,本质仍沿用技术用户的协作逻辑,始终无法解决非…...
FLUX.1-dev FP8:让普通显卡也能跑专业级AI绘画模型
FLUX.1-dev FP8:让普通显卡也能跑专业级AI绘画模型 【免费下载链接】flux1-dev 项目地址: https://ai.gitcode.com/hf_mirrors/Comfy-Org/flux1-dev 还在为AI绘画的高显存需求而发愁吗?现在,你的游戏显卡也能流畅运行专业级图像生成模…...
