下载工作台
Spring Boot Web 开发

毕业项目:shop-spring 电商后台

试读上半部分 · 解锁后可读全文

第 12 章 · 毕业项目:shop-spring 电商后台 MVP

本章目标:在 ch01~ch11 基础上,独立交付 shop-spring-demo 电商后台 API 最小可行产品(MVP);覆盖用户登录商品管理订单流程REST API 与统一响应;按 5 天计划实施;通过 100 分验收表自评;完成 curl 冒烟与答辩演示。

学时建议:5 天 × 6~8 小时(合计 30~40 小时)

前置:完成本模块 ch01~ch11;前端联调可参考 frontend-framework API 章节。


12.1 项目背景与边界

shop-spring-demo 是一家虚构的「轻量电商后台 API 平台」,为运营 SPA 与内部工具提供 JSON 接口。服务部署在 https://api.example.com(本地等价 http://127.0.0.1:8080)。

┌──────────────────────────────────────────────────────────┐
│           shop-spring-demo MVP(本章)                    │
├──────────┬──────────┬──────────┬─────────────────────────┤
│ 用户登录  │ 商品 API  │ 订单 API  │  横切与运维              │
│ 注册/会话 │ CRUD+分页 │ 创建/查询 │  缓存/日志/测试/部署     │
└──────────┴──────────┴──────────┴─────────────────────────┘
                        │
                        ▼
              MySQL(教学可用 H2)
              Redis(缓存 ch10)
模块MVP 必须不做(进阶 ch13~ch19)
用户注册、登录、/api/users/me、密码哈希JWT 无状态(ch15)、OAuth2
商品列表、搜索、创建/编辑、上下架、封面上传SKU 矩阵、库存扣减事务优化
订单创建、我的订单、状态流转(待付/已付/取消)支付网关、分布式事务
APIREST + Result<T> 统一 envelopeSpringDoc 完整文档(ch14)
安全Spring Security 表单/Session 或基础 JWTRBAC 细粒度(ch16)
运维.env.example、jar 文档、健康检查Docker/K8s 全量(ch19)
严禁将真实公司内部域名、数据库连接串、密钥写入仓库或答辩材料。统一使用 shop-spring-demoapi.example.com

12.2 技术栈与目录结构

层级技术对应章节
框架Spring Boot 3.xch01
WebSpring MVC RESTch03、ch07
ORMSpring Data JPAch05
安全Spring Securitych06
响应统一 Result + 错误码ch07
上传MultipartFilech08
横切AOP + Interceptor + Logbackch09
缓存异步Redis Cache + @Async + @Scheduledch10
测试部署MockMvc + jar + systemdch11
shop-spring-demo/
├── .env.example
├── docker-compose.dev.yml       # MySQL + Redis
├── docs/
│   ├── API.md
│   ├── DEPLOY.md
│   └── SELF_REVIEW.md           # 100 分自评表
├── scripts/smoke.sh
├── src/main/java/com/example/shop/
│   ├── config/                  # Security, WebMvc, Redis, Async
│   ├── domain/                  # User, Product, Order
│   ├── repository/
│   ├── service/
│   ├── web/                     # REST Controller
│   ├── dto/                     # ch13 深化
│   ├── common/                  # Result, 异常, 错误码
│   ├── aop/
│   └── job/                     # @Scheduled
└── src/test/java/...            # MockMvc 测试

12.3 核心实体与 API 清单

User 1 ──* Order
Product 1 ──* OrderItem *── 1 Order
实体关键字段说明
Userusername 唯一BCrypt 密码
Productpublished下架商品不出现在公开列表
OrderPENDING_PAYMENT 等枚举ch10 定时取消
OrderItempriceSnapshot下单时价格快照

认证

方法路径说明
POST/api/auth/register注册
POST/api/auth/login登录返回 Token 或 Session
GET/api/users/me当前用户

商品

方法路径说明
GET/api/products分页列表 page,size,keyword
GET/api/products/{id}详情
POST/api/products创建(ADMIN)
PUT/api/products/{id}更新
POST/api/products/{id}/cover封面上传 ch08
PATCH/api/products/{id}/publish上下架

订单

方法路径说明
POST/api/orders创建订单 {items:[{productId,qty}]}
GET/api/orders/me我的订单分页
GET/api/orders/{id}订单详情
POST/api/orders/{id}/pay模拟支付成功
POST/api/orders/{id}/cancel取消

统一响应:

{
  "code": 0,
  "message": "ok",
  "data": { ... },
  "timestamp": "2026-08-19T10:00:00+08:00"
}

12.4 五天实施计划

Day 1:骨架与领域模型

时段任务产出
上午初始化项目、docker-compose MySQL+Redis可启动空应用
下午User/Product/Order 实体与 Repository表自动创建
晚上种子数据 CommandLineRunner(dev)admin 账号可登录

验收:GET /actuator/health 为 UP。

Day 2:安全与商品 API

时段任务产出
上午Spring Security + 登录注册/api/auth/*
下午Product CRUD + 统一 Resultch07 错误码
晚上商品列表分页与 keyword 搜索MockMvc 2 条用例

验收:GET /api/products 无需登录;POST 需 ADMIN。

Day 3:订单与上传

时段任务产出
上午创建订单、库存校验库存不足返回业务错误
下午我的订单、模拟支付/取消状态机正确
晚上MultipartFile 封面上传 + Profilech08 完成

验收:完整下单流程 curl 可跑通。

Day 4:横切能力

时段任务产出
上午AOP 耗时 + ACCESS 日志 + traceIdch09
下午Redis 缓存商品详情 + @CacheEvictch10
晚上@Async 订单通知 + 定时关单日志可见异步

验收:第二次读商品详情无重复 SQL。

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。