Branch develop was renamed to dev.
Reviewed-on: #6
novalon-manage-system
企业级后台管理系统
项目结构
novalon-manage-system/
├── novalon-manage-api/ # 后端 API 项目
│ ├── manage-gateway/ # API 网关服务
│ ├── manage-app/ # 主应用服务
│ ├── manage-sys/ # 系统管理模块
│ ├── manage-db/ # 数据库模块
│ ├── manage-common/ # 公共模块
│ ├── manage-audit/ # 审计模块
│ ├── manage-notify/ # 通知模块
│ └── manage-file/ # 文件管理模块
├── novalon-manage-web/ # 前端 Web 项目
├── api_integration_tests/ # API 集成测试
└── e2e-tests/ # E2E 测试
技术栈
后端
- Java 21
- Spring Boot 3.5.13
- Spring Cloud Gateway
- Spring Security + JWT
- R2DBC (响应式数据库访问)
- PostgreSQL 15
- Flyway (数据库迁移)
前端
- Vue 3 + TypeScript
- Element Plus
- Pinia (状态管理)
- Vite (构建工具)
- Playwright (E2E 测试)
快速开始
方式一:Docker Compose(推荐)
使用 Docker Compose 可以一键启动所有服务,包括数据库、后端和前端。
前置要求
- Docker 20.10+
- Docker Compose 2.0+
启动步骤
- 克隆项目
git clone <repository-url>
cd novalon-manage-system
- 启动所有服务
docker-compose up -d
- 查看服务状态
docker-compose ps
- 查看日志
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f postgres
docker-compose logs -f backend
docker-compose logs -f frontend
- 访问应用
- 前端应用: http://localhost:3001
- 后端 API: http://localhost:8084
- API 文档: http://localhost:8084/swagger-ui.html
- 健康检查: http://localhost:8084/actuator/health
停止服务
docker-compose down
清理数据(包括数据库数据)
docker-compose down -v
方式二:本地开发环境
1. 环境准备要求
必需软件
- Java: JDK 21 或更高版本
- Maven: 3.8+ (用于后端构建)
- Node.js: 18+ (用于前端构建)
- pnpm: 8+ (推荐) 或 npm
- PostgreSQL: 15+ (数据库)
- Git: 版本控制
可选软件
- Docker: 用于容器化部署
- IDE: IntelliJ IDEA (推荐) 或 VS Code
系统要求
- 操作系统: macOS, Linux, Windows
- 内存: 最低 4GB,推荐 8GB+
- 磁盘空间: 最低 2GB 可用空间
2. 依赖安装步骤
2.1 安装 Java 和 Maven
macOS (使用 Homebrew):
brew install openjdk@21
brew install maven
# 设置 JAVA_HOME
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v21)' >> ~/.zshrc
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
# 验证安装
java -version
mvn -version
Linux (Ubuntu/Debian):
# 安装 OpenJDK 21
sudo apt update
sudo apt install openjdk-21-jdk
# 安装 Maven
sudo apt install maven
# 验证安装
java -version
mvn -version
Windows:
- 下载并安装 JDK 21: https://adoptium.net/
- 下载并安装 Maven: https://maven.apache.org/download.cgi
- 设置环境变量:
JAVA_HOME: 指向 JDK 安装目录MAVEN_HOME: 指向 Maven 安装目录PATH: 添加%JAVA_HOME%\bin和%MAVEN_HOME%\bin
2.2 安装 Node.js 和 pnpm
使用 nvm (推荐):
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
# 重新加载 shell
source ~/.bashrc # 或 source ~/.zshrc
# 安装 Node.js 18
nvm install 18
nvm use 18
# 安装 pnpm
npm install -g pnpm
# 验证安装
node -v
pnpm -v
macOS (使用 Homebrew):
brew install node
npm install -g pnpm
Windows:
- 下载并安装 Node.js: https://nodejs.org/
- 安装 pnpm:
npm install -g pnpm
2.3 安装 PostgreSQL
macOS (使用 Homebrew):
brew install postgresql@15
brew services start postgresql@15
# 创建数据库和用户
psql postgres
在 psql 中执行:
CREATE DATABASE manage_system;
CREATE USER novalon WITH PASSWORD 'novalon123';
GRANT ALL PRIVILEGES ON DATABASE manage_system TO novalon;
\q
Linux (Ubuntu/Debian):
sudo apt install postgresql-15 postgresql-contrib-15
sudo systemctl start postgresql
# 创建数据库和用户
sudo -u postgres psql
在 psql 中执行:
CREATE DATABASE manage_system;
CREATE USER novalon WITH PASSWORD 'novalon123';
GRANT ALL PRIVILEGES ON DATABASE manage_system TO novalon;
\q
Windows:
- 下载并安装 PostgreSQL: https://www.postgresql.org/download/windows/
- 使用 pgAdmin 创建数据库和用户,或使用命令行工具
2.4 验证环境
创建并运行环境检查脚本:
# 检查 Java
java -version
mvn -version
# 检查 Node.js
node -v
pnpm -v
# 检查 PostgreSQL
psql --version
3. 数据库初始化
3.1 配置数据库连接
后端使用 Flyway 自动管理数据库迁移,数据库表结构会在首次启动时自动创建。
开发环境配置 (novalon-manage-api/manage-app/src/main/resources/application-dev.yml):
spring:
r2dbc:
url: r2dbc:postgresql://localhost:55432/manage_system
username: novalon
password: novalon123
flyway:
enabled: true
生产环境配置 (novalon-manage-api/manage-app/src/main/resources/application-prod.yml):
spring:
r2dbc:
url: r2dbc:postgresql://postgres:5432/novalon_manage
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
flyway:
enabled: true
3.2 手动初始化数据库(可选)
如果需要手动初始化数据库,可以执行以下 SQL 脚本:
# 连接到数据库
psql -U novalon -d manage_system
# 执行初始化脚本
\i novalon-manage-api/manage-db/src/main/resources/db/migration/V1__Create_all_tables.sql
\i novalon-manage-api/manage-db/src/main/resources/db/migration/V2__Insert_initial_data.sql
\i novalon-manage-api/manage-db/src/main/resources/db/migration/V3__Create_indexes.sql
\i novalon-manage-api/manage-db/src/main/resources/db/migration/V4__Create_permission_tables.sql
# 退出
\q
3.3 验证数据库连接
# 测试数据库连接
psql -U novalon -d manage_system -c "SELECT version();"
# 查看已创建的表
psql -U novalon -d manage_system -c "\dt"
4. 后端网关服务配置说明
4.1 网关服务概述
manage-gateway 是系统的 API 网关,负责:
- 请求路由和转发
- JWT 认证过滤
- RBAC 权限控制
- 请求重试机制
- 限流和熔断
4.2 网关配置文件
主配置 (novalon-manage-api/manage-gateway/src/main/resources/application.yml):
server:
port: 8080
spring:
application:
name: manage-gateway
cloud:
gateway:
routes:
- id: manage-app
uri: http://localhost:8084
predicates:
- Path=/api/**
default-filters:
- name: JwtAuthentication
- name: RbacAuthorization
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY,SERVICE_UNAVAILABLE
methods: GET,POST
backoff:
firstBackoff: 10ms
maxBackoff: 50ms
factor: 2
basedOnPreviousValue: false
jwt:
secret: ${JWT_SECRET:mySecretKeyForNovalonManageSystem2024}
expiration: ${JWT_EXPIRATION:86400000}
management:
endpoints:
web:
exposure:
include: health,info,metrics
base-path: /actuator
endpoint:
health:
show-details: always
metrics:
tags:
application: ${spring.application.name}
logging:
level:
cn.novalon.manage: DEBUG
org.springframework.cloud.gateway: DEBUG
4.3 网关路由配置
网关将所有 /api/** 路径的请求转发到 manage-app 服务 (端口 8084)。
路由规则:
- 所有以
/api/开头的请求都会被转发到后端服务 - 请求会经过 JWT 认证和 RBAC 权限验证
- 失败的请求会自动重试(最多 3 次)
4.4 JWT 配置
环境变量:
JWT_SECRET: JWT 密钥(生产环境必须设置强密钥)JWT_EXPIRATION: Token 过期时间(毫秒,默认 24 小时)
示例:
export JWT_SECRET="your-strong-secret-key-here"
export JWT_EXPIRATION="86400000"
4.5 网关健康检查
# 检查网关健康状态
curl http://localhost:8080/actuator/health
# 查看网关信息
curl http://localhost:8080/actuator/info
# 查看网关指标
curl http://localhost:8080/actuator/metrics
5. 完整的项目启动步骤
5.1 启动后端服务
步骤 1: 进入后端项目目录
cd novalon-manage-api
步骤 2: 编译项目
mvn clean install -DskipTests
步骤 3: 启动网关服务
cd manage-gateway
mvn spring-boot:run
网关将在 http://localhost:8080 启动。
步骤 4: 启动主应用服务 打开新的终端窗口:
cd novalon-manage-api/manage-app
mvn spring-boot:run
主应用将在 http://localhost:8084 启动。
步骤 5: 验证后端服务
# 检查网关健康状态
curl http://localhost:8080/actuator/health
# 检查应用健康状态
curl http://localhost:8084/actuator/health
# 访问 API 文档
open http://localhost:8084/swagger-ui.html
5.2 启动前端服务
步骤 1: 进入前端项目目录
cd novalon-manage-web
步骤 2: 安装依赖
pnpm install
步骤 3: 配置环境变量
创建 .env.local 文件(如果不存在):
VITE_API_BASE_URL=http://localhost:8080
VITE_APP_TITLE=Novalon管理系统
步骤 4: 启动开发服务器
pnpm dev
前端应用将在 http://localhost:5173 启动。
步骤 5: 访问应用 在浏览器中打开: http://localhost:5173
6. 不同环境的启动命令和配置差异
6.1 环境配置文件
后端支持多环境配置:
application.yml: 主配置文件application-dev.yml: 开发环境配置application-test.yml: 测试环境配置application-prod.yml: 生产环境配置application-metrics.yml: 监控指标配置
6.2 开发环境启动
后端:
cd novalon-manage-api/manage-app
mvn spring-boot:run -Dspring-boot.run.profiles=dev
前端:
cd novalon-manage-web
pnpm dev
特点:
- 使用本地数据库 (localhost:55432)
- DEBUG 日志级别
- 热重载启用
- Swagger UI 可用
6.3 测试环境启动
后端:
cd novalon-manage-api/manage-app
mvn spring-boot:run -Dspring-boot.run.profiles=test
前端:
cd novalon-manage-web
pnpm dev:test
特点:
- 使用测试数据库
- INFO 日志级别
- 性能监控启用
- 测试数据可用
6.4 生产环境启动
后端:
# 设置环境变量
export DB_USERNAME=your_prod_db_user
export DB_PASSWORD=your_prod_db_password
export JWT_SECRET=your_prod_jwt_secret
# 启动应用
cd novalon-manage-api/manage-app
mvn spring-boot:run -Dspring-boot.run.profiles=prod
前端构建:
cd novalon-manage-web
pnpm build:prod
前端部署:
# 使用 nginx 或其他静态文件服务器部署 dist 目录
pnpm preview
特点:
- 使用生产数据库
- INFO/WARN 日志级别
- 性能优化
- 安全加固
- Swagger UI 禁用
6.5 Docker 环境启动
使用 docker-compose:
# 开发环境
docker-compose -f docker-compose.yml up -d
# 测试环境
docker-compose -f docker-compose.test.yml up -d
特点:
- 容器化部署
- 服务编排
- 健康检查
- 自动重启
7. 常见启动问题的故障排除指南
7.1 端口冲突问题
症状:
Port 8080 was already in use
解决方案:
# 查找占用端口的进程
lsof -i :8080 # macOS/Linux
netstat -ano | findstr :8080 # Windows
# 终止进程
kill -9 <PID> # macOS/Linux
taskkill /PID <PID> /F # Windows
# 或修改配置文件中的端口
# 在 application.yml 中修改 server.port
7.2 数据库连接失败
症状:
Connection refused: localhost:55432
解决方案:
# 检查 PostgreSQL 服务状态
brew services list | grep postgresql # macOS
systemctl status postgresql # Linux
# 启动 PostgreSQL 服务
brew services start postgresql@15 # macOS
sudo systemctl start postgresql # Linux
# 检查数据库连接
psql -U novalon -d manage_system -c "SELECT 1;"
# 检查防火墙设置
sudo ufw allow 5432 # Linux
7.3 Maven 依赖下载失败
症状:
Could not resolve dependencies
解决方案:
# 清理 Maven 缓存
rm -rf ~/.m2/repository
# 使用国内镜像源
# 在 ~/.m2/settings.xml 中配置阿里云镜像
mvn clean install -U
# 检查网络连接
ping repo.maven.apache.org
7.4 前端依赖安装失败
症状:
npm ERR! network request failed
解决方案:
# 清理缓存
pnpm store prune
# 使用国内镜像源
pnpm config set registry https://registry.npmmirror.com
# 重新安装
rm -rf node_modules
pnpm install
7.5 JWT 认证失败
症状:
401 Unauthorized
Invalid JWT token
解决方案:
# 检查 JWT_SECRET 配置
echo $JWT_SECRET
# 确保前后端使用相同的 JWT 密钥
# 检查网关和应用的配置文件
# 重新生成 Token
# 使用登录接口获取新的 JWT Token
7.6 Flyway 迁移失败
症状:
FlywayException: Validate failed
解决方案:
# 查看迁移历史
psql -U novalon -d manage_system -c "SELECT * FROM flyway_schema_history;"
# 修复失败的迁移
# 1. 备份数据库
# 2. 修复迁移脚本
# 3. 删除失败的迁移记录
# 4. 重新运行迁移
# 或手动修复
psql -U novalon -d manage_system
DELETE FROM flyway_schema_history WHERE success = false;
\q
7.7 内存不足错误
症状:
Java heap space
OutOfMemoryError
解决方案:
# 增加 JVM 内存
export MAVEN_OPTS="-Xmx2g -Xms1g"
# 或在 pom.xml 中配置
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-Xmx2g</argLine>
</configuration>
</plugin>
7.8 CORS 跨域问题
症状:
Access to XMLHttpRequest blocked by CORS policy
解决方案:
# 检查网关 CORS 配置
# 在 application.yml 中添加:
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "http://localhost:5173"
allowedMethods:
- GET
- POST
- PUT
- DELETE
- OPTIONS
allowedHeaders: "*"
allowCredentials: true
7.9 日志查看和调试
查看应用日志:
# 后端日志
tail -f novalon-manage-api/manage-app/logs/application.log
# 网关日志
tail -f novalon-manage-api/manage-gateway/logs/application.log
# Docker 日志
docker-compose logs -f backend
docker-compose logs -f gateway
启用 DEBUG 日志:
# 在 application.yml 中设置
logging:
level:
root: DEBUG
cn.novalon.manage: DEBUG
org.springframework: DEBUG
8. 启动成功后的验证方法
8.1 后端服务验证
健康检查:
# 网关健康检查
curl http://localhost:8080/actuator/health
# 应用健康检查
curl http://localhost:8084/actuator/health
# 预期输出:
# {"status":"UP"}
API 文档访问:
# 在浏览器中打开
open http://localhost:8084/swagger-ui.html
# 或使用 curl
curl http://localhost:8084/swagger-ui.html
数据库连接验证:
# 检查数据库表是否创建成功
psql -U novalon -d manage_system -c "\dt"
# 预期输出应包含以下表:
# users, roles, menus, sys_dict_type, sys_dict_data, etc.
API 端点测试:
# 测试登录接口
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin123"}'
# 预期输出:
# {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}
8.2 前端应用验证
应用访问:
# 在浏览器中打开
open http://localhost:5173
功能验证清单:
- 登录页面正常显示
- 能够成功登录(使用默认账号 admin/admin123)
- 主页面正常加载
- 菜单导航正常工作
- 用户管理功能可用
- 角色管理功能可用
- 系统配置功能可用
浏览器控制台检查:
// 打开浏览器开发者工具 (F12)
// 检查 Console 标签页,确保没有错误信息
// 检查 Network 标签页,确认 API 请求正常
8.3 集成测试验证
运行 API 集成测试:
cd api_integration_tests
pip install -r requirements.txt
pytest tests/ -v
运行 E2E 测试:
cd novalon-manage-web
pnpm test:e2e
8.4 性能验证
后端性能测试:
# 使用 k6 进行性能测试
cd novalon-manage-api/manage-sys/src/test/k6
k6 run performance-test.js
前端性能测试:
cd novalon-manage-web
pnpm test:perf
8.5 监控和日志
查看应用指标:
# 查看应用指标
curl http://localhost:8084/actuator/metrics
# 查看特定指标
curl http://localhost:8084/actuator/metrics/jvm.memory.used
查看日志:
# 查看应用日志
tail -f novalon-manage-api/manage-app/logs/application.log
# 查看错误日志
grep ERROR novalon-manage-api/manage-app/logs/application.log
8.6 完整验证脚本
创建验证脚本 verify-setup.sh:
#!/bin/bash
echo "=== Novalon 管理系统启动验证 ==="
# 1. 检查后端服务
echo "1. 检查网关服务..."
if curl -s http://localhost:8080/actuator/health | grep -q "UP"; then
echo "✓ 网关服务正常"
else
echo "✗ 网关服务异常"
exit 1
fi
echo "2. 检查应用服务..."
if curl -s http://localhost:8084/actuator/health | grep -q "UP"; then
echo "✓ 应用服务正常"
else
echo "✗ 应用服务异常"
exit 1
fi
# 3. 检查数据库
echo "3. 检查数据库连接..."
if psql -U novalon -d manage_system -c "SELECT 1;" > /dev/null 2>&1; then
echo "✓ 数据库连接正常"
else
echo "✗ 数据库连接失败"
exit 1
fi
# 4. 检查前端服务
echo "4. 检查前端服务..."
if curl -s http://localhost:5173 > /dev/null 2>&1; then
echo "✓ 前端服务正常"
else
echo "✗ 前端服务异常"
exit 1
fi
echo "=== 所有服务验证通过 ==="
运行验证脚本:
chmod +x verify-setup.sh
./verify-setup.sh
功能模块
已完成功能
- ✅ 用户管理 - 完整的用户CRUD操作、角色分配、状态管理
- ✅ 角色管理 - 角色定义、权限配置、菜单关联
- ✅ 菜单管理 - 菜单树结构、路由配置、权限控制
- ✅ 权限管理 - 权限定义、角色授权、API权限控制
- ✅ 操作日志 - 登录日志、异常日志、操作记录
- ✅ 字典管理 - 字典类型管理、字典数据管理、数据字典
- ✅ 系统配置 - 系统参数配置、配置管理、缓存刷新
- ✅ 审计中心 - 审计日志、操作审计、安全审计
- ✅ 通知中心 - 通知公告、用户消息、消息推送
- ✅ 文件管理 - 文件上传、文件下载、文件预览
- ✅ WebSocket消息推送 - 实时通知、消息推送、在线状态
核心特性
- 响应式编程: 基于Spring WebFlux的异步非阻塞架构
- JWT认证: 无状态Token认证,支持Token刷新
- 权限控制: 基于角色的访问控制(RBAC)
- 实时通信: WebSocket支持实时消息推送
- 文件预览: 支持图片、PDF、文本文件的在线预览
- 逻辑删除: 支持数据的软删除和恢复
- 审计日志: 完整的操作审计和安全审计
开发指南
后端开发
cd novalon-manage-api
mvn clean install
mvn spring-boot:run
前端开发
cd novalon-manage-web
pnpm install
pnpm dev
测试
# 后端单元测试
cd novalon-manage-api
mvn test
# 前端单元测试
cd novalon-manage-web
pnpm test
# E2E 测试
cd novalon-manage-web
pnpm test:e2e
# API 集成测试
cd api_integration_tests
pytest tests/
部署
Docker 部署
# 构建镜像
docker-compose build
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
生产环境部署
详见部署文档 DEPLOYMENT.md
故障排除
常见问题
- 端口冲突: 修改
application.yml中的端口配置 - 数据库连接失败: 检查 PostgreSQL 服务状态和连接配置
- JWT 认证失败: 确认前后端使用相同的 JWT 密钥
- CORS 跨域问题: 配置网关的 CORS 设置
详细故障排除指南请参考 TROUBLESHOOTING.md
贡献指南
欢迎贡献代码!请阅读 CONTRIBUTING.md 了解详细信息。
License
MIT
项目规划
当前阶段:系统修复与优化
短期目标(2026-04-02)
-
✅ 服务重启与验证
- 重启Gateway、App、Frontend服务
- 解决前端白屏问题(Vite进程挂起)
- 验证服务健康状态
-
⏳ 测试套件验证
- 运行后端单元测试
- 运行后端集成测试
- 运行E2E测试
- 修复失败的测试
-
📋 命名规范统一
- Service接口: IXxxService
- Service实现: XxxService
- Repository接口: IXxxRepository
- Repository实现: XxxRepository
中期目标(2026-04)
- 完善测试覆盖率
- 优化性能和稳定性
- 完善监控和告警
- 文档完善
长期目标(2026-Q2)
- 微服务架构优化
- 容器化部署完善
- CI/CD流水线优化
- 安全加固
项目进度
2026-04-02 进度更新
已完成
- ✅ JWT密钥统一配置
- ✅ 签名验证修复
- ✅ Repository扫描修复
- ✅ JwtKeyService初始化修复
- ✅ 前端白屏问题修复
- ✅ 后端单元测试通过 (12/12)
进行中
- ⏳ 后端集成测试修复
- ⏳ E2E测试验证
- ⏳ 登录功能调试
待开始
- 📋 命名规范统一
- 📋 完整测试验证
- 📋 文档更新
技术债务
高优先级
- 登录功能异常 - 需要优先修复
- 集成测试失败 - 缺少Spring Boot配置
- 密钥管理 - 当前硬编码,存在安全风险
中优先级
- 命名规范不统一 - 影响代码可读性
- 测试覆盖率不足 - 需要补充测试用例
- 文档不完整 - 影响团队协作
低优先级
- 性能优化 - 当前性能可接受
- 代码重构 - 可以逐步改进
关键决策记录
2026-04-02: 前端服务启动方式
问题: 使用nohup启动Vite开发服务器时,进程被挂起导致白屏
根本原因: Vite尝试从标准输入读取命令,在macOS上导致进程挂起
解决方案: 将标准输入重定向到/dev/null
命令: nohup ./start-frontend.sh > /tmp/frontend.log 2>&1 </dev/null &
2026-04-02: JWT密钥管理
问题: manage-app和gateway使用不同的JWT密钥
解决方案: 统一使用gateway的密钥配置
影响: 所有已生成的Token将失效,用户需要重新登录
2026-04-02: 签名验证实现
问题: 前端bodyString被硬编码为空字符串
解决方案: 正确处理请求体 body ? JSON.stringify(body) : ''
影响: POST请求现在可以正确签名验证
相关文档
最后更新: 2026-04-02
维护人员: 张翔
API响应格式修复记录 (2026-04-02)
问题描述
测试套件运行失败,多个API测试返回响应格式不符合预期:
AssertionError: assert "content" in data
Expected: {"content": [...], "totalElements": 5, "totalPages": 1, ...}
Actual: [...]
根因分析
问题根源: API路径与后端路由不匹配
| 测试调用 | 后端路由 | Handler方法 | 返回格式 |
|---|---|---|---|
/api/logs/login?page=0&size=10 |
/api/logs/login |
getAllLoginLogs() |
列表 [] |
应该调用 /api/logs/login/page?page=0&size=10 |
/api/logs/login/page |
getLoginLogsByPage() |
PageResponse {} |
影响范围:
- 用户API:
/api/users?page=0&size=10 - 角色API:
/api/roles?page=0&size=10 - 登录日志API:
/api/logs/login?page=0&size=10 - 异常日志API:
/api/logs/exception?page=0&size=10
修复方案
方案选择: 修改后端Handler,让 getAllXxx() 方法支持分页参数
理由:
- 符合RESTful API最佳实践:
GET /resources应支持查询参数 - 向后兼容: 无分页参数时返回列表,有分页参数时返回分页对象
- 减少测试代码修改
修复内容
1. SysLogHandler.java
修改 getAllLoginLogs() 和 getAllExceptionLogs() 方法:
@Operation(summary = "获取所有登录日志", description = "获取系统中所有登录日志列表,支持分页参数")
public Mono<ServerResponse> getAllLoginLogs(ServerRequest request) {
boolean hasPageParams = request.queryParam("page").isPresent() || request.queryParam("size").isPresent();
if (hasPageParams) {
// 返回分页对象
int page = Integer.parseInt(request.queryParam("page").orElse("0"));
int size = Integer.parseInt(request.queryParam("size").orElse("10"));
// ... 构建PageRequest并调用分页服务
return loginLogService.findLoginLogsByPage(pageRequest)
.flatMap(response -> ServerResponse.ok().bodyValue(response));
} else {
// 返回列表
return ServerResponse.ok()
.body(loginLogService.findAll(), SysLoginLog.class);
}
}
2. SysUserHandler.java
修改 getAllUsers() 方法,支持分页参数。
3. SysRoleHandler.java
修改 getAllRoles() 方法,支持分页参数。
修复效果
修复前:
/api/logs/login→ 返回列表[]/api/logs/login?page=0&size=10→ 返回列表[]❌
修复后:
/api/logs/login→ 返回列表[]✅/api/logs/login?page=0&size=10→ 返回分页对象{}✅
API设计原则
遵循RESTful API最佳实践:
- 资源路径:
/api/resources - 查询参数: 用于过滤、排序、分页
?page=0&size=10- 分页参数?keyword=admin- 关键词搜索?sort=id&order=desc- 排序参数
- 响应格式:
- 无分页参数: 返回资源列表
- 有分页参数: 返回分页对象
{
"content": [...],
"totalElements": 100,
"totalPages": 10,
"currentPage": 0,
"pageSize": 10,
"first": true,
"last": false
}
验证状态
- ✅ 代码编译通过
- ⏳ 集成测试验证 (需要数据库环境)
- ⏳ E2E测试验证 (需要完整环境)