当前位置: 首页 > 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 {@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语言--正序、逆序输出为奇数的位。

题目&#xff1a; 采用正序和逆序分别输出为奇数的位。例如输入12345&#xff0c;正序输出135&#xff0c;逆序输出531 代码&#xff1a; #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源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…...

H13-821 V3.0 HCIP 华为云服务架构题库

华为云上哪个服务能够用于收集来自主机和云服务的日志数据&#xff0c;并通过海量日志数据的分析与处理帮助开发或运维人员进行问题定位和分析&#xff1f; A&#xff1a;云监控服务 B&#xff1a;云日志服务 C&#xff1a;云审计服务 D&#xff1a;对象存储服务 答案&#xff…...

Linux主机用户登陆安全配置

Linux主机用户登陆安全配置 在Linux主机上进行用户登录安全配置是一个重要的安全措施&#xff0c;可以防止未经授权的访问。以下是如何创建用户hbu、赋予其sudo权限&#xff0c;以及禁止root用户SSH登录&#xff0c;以及通过ssh key管理主机用户登陆。 创建用户hbu 使用具有…...

提升数据洞察力:五款报表软件助力企业智能决策

概述 随着数据量的激增和企业对决策支持需求的提升&#xff0c;报表软件已经成为现代企业管理中不可或缺的工具。这些软件能够帮助企业高效处理数据、生成报告&#xff0c;并将数据可视化&#xff0c;从而推动更智能的决策过程。 1. 山海鲸报表 概述&#xff1a; 山海鲸报表…...

Linux | man 手册使用详解

注&#xff1a;本文为 “Linux man 手册” 相关文章合辑。 略作重排。 man 手册常用命令 1. 查看和搜索手册页 查看特定软件包的手册页&#xff0c;并使用 grep 命令过滤出包含特定关键字的行&#xff1a; man <package> | grep <keyword>在整个系统的手册页中…...

安全见闻4

今天学了Windows操作系统和驱动程序的相关知识 Windows注册表 注册表是windows系统中具有层次结构的核心数据库 储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。 打开注册表编辑器…...

项目实战--网页五子棋(匹配模块)(4)

上期我们完成了游戏大厅的前端部分内容&#xff0c;今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后&#xff0c;我们可以维护好用户的websocket会话&#xff0c;把用户表示为在线状态&#xff0c;方便获取到用户的websocket会话 package org.ting.j20250110_g…...

P8716 [蓝桥杯 2020 省 AB2] 回文日期

1 题目说明 2 题目分析 暴力不会超时&#xff0c;O(n)的时间复杂度&#xff0c; < 1 0 8 <10^8 <108。分析见代码&#xff1a; #include<iostream> #include<string> using namespace std;int m[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};// 判断日期…...

如何在视频中提取关键帧?

在视频处理中&#xff0c;提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python&#xff0c;结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳&#xff1a;FFmpeg是一个强大的视频处理工具&#xff0c;可以通过命令行获取…...

為什麼使用不限量動態住宅IP採集數據?

在瞭解“不限量動態住宅IP數據採集”之前&#xff0c;我們需要先搞清楚什麼是“動態住宅IP”。簡單來說&#xff0c;動態IP是一種會定期變化的IP地址&#xff0c;通常由互聯網服務提供商&#xff08;ISP&#xff09;分配給家庭用戶。與固定IP&#xff08;靜態IP&#xff09;不同…...

Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用

在Go中使用Viper将YAML配置绑定到结构体时&#xff0c;主要依赖 mapstructure 标签&#xff08;而非 json 或 yaml 标签&#xff09;实现字段名映射。 --- ### 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. 源由 鉴于飞行过程&#xff0c;发现一些马赛克现象&#xff0c;且60FPS桌面30FPS的录…...

[杂学笔记]OSI七层模型作用、HTTP协议中的各种方法、HTTP的头部字段、TLS握手、指针与引用的使用场景、零拷贝技术

1.OSI七层模型作用 物理层&#xff1a;负责光电信号的传输&#xff0c;以及将光电信号转化为二进制数据数据链路层&#xff1a;主要负责将收到的二进制数据进一步的封装为数据帧报文。同时因为数据在网络中传递的时候&#xff0c;每一个主机都能够收到报文数据&#xff0c;该层…...

RK3568开发笔记-AD7616调试笔记

目录 前言 一、AD7616介绍 高分辨率 高速采样速率 宽模拟输入范围 集成丰富功能 二、原理图连接 三、设备树配置 四、内核驱动配置 五、AD芯片测试 总结 前言 在嵌入式数据采集领域,将模拟信号精准转换为数字信号至关重要。AD7616 作为一款性能卓越的 16 位模数转换器…...

Unity摄像机与灯光相关知识

一、Inspector窗口 Inspector窗口可以查看和编辑对象的属性以及设置 其中包含各种组件&#xff0c;例如用Cube对象来举例 1.Sphere(Mesh)组件&#xff1a; 用来决定对象的网格属性&#xff0c;例如球体网格为Sphere、立方体网格为Cube 2.Mesh Renderer组件&#xff1a; 用来设置…...

AI前端革新金融风控:ScriptEcho助力高效开发

1. 引言&#xff1a;金融风控的挑战与前端效率需求 在当今快速变化的金融环境中&#xff0c;风险评估和反欺诈已成为金融机构运营的核心。金融风控不仅关乎企业的盈利能力&#xff0c;更直接影响着整个金融体系的稳定。一个强大的风控系统需要能够实时监控、分析并预测潜在的风…...

STM32--SPI通信讲解

前言 嘿&#xff0c;小伙伴们&#xff01;今天咱们来聊聊STM32的SPI通信。SPI&#xff08;Serial Peripheral Interface&#xff09;是一种超常用的串行通信协议&#xff0c;特别适合微控制器和各种外设&#xff08;比如传感器、存储器、显示屏&#xff09;之间的通信。如果你…...

CryptoJS库中WordArray对象支持哪些输出格式?除了toString() 方法还有什么方法可以输出吗?WordArray对象的作用是什么?

前言&#xff1a;这里只说js用的CryptoJS库里的相关内容&#xff0c;只用js来进行代码操作和讲解。 这里网上相关的帖子很少&#xff0c;不得已问了很长时间AI 想引用CryptoJS库情况分两种&#xff0c;一种是html引用&#xff0c;另一种是在Nodejs里引用。 一、引用CryptoJS库…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

职坐标物联网全栈开发全流程解析

物联网全栈开发涵盖从物理设备到上层应用的完整技术链路&#xff0c;其核心流程可归纳为四大模块&#xff1a;感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性&#xff0c;例如传感器选型需平衡精度与…...