1. 项目背景与核心价值
去年帮朋友处理一起宠物交易纠纷时,发现这个行业存在严重的信息不对称问题。卖家隐瞒宠物病史、买家恶意拖欠尾款、运输途中出现意外...这些乱象促使我决定开发一个规范化的交易平台。采用SpringBoot+Vue这套技术栈,不仅因为其成熟的生态体系,更看重前后端分离架构带来的灵活性和可维护性。
这个平台的核心价值在于:
- 建立宠物电子档案(包括疫苗记录、血统证明等)
- 引入第三方资金托管机制
- 实现交易全流程可视化
- 搭建宠物健康知识社区
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计解析
2.1 为什么选择SpringBoot+Vue
经历过传统JSP项目的维护噩梦后,我坚持采用前后端分离架构。SpringBoot 2.7.3提供:
- 内嵌Tomcat简化部署
- Starter依赖自动配置
- Actuator监控端点
- 与MyBatis-Plus完美集成
前端选择Vue 3.2+的原因:
- Composition API更适合复杂交互
- Pinia状态管理更轻量
- Vite构建速度碾压Webpack
- Element Plus组件库成熟
2.2 数据库设计中的坑
最初使用JPA自动建表,直到遇到:
- 宠物多图存储问题
- 交易状态机复杂度
- 地理位置查询需求
最终方案:
sql复制CREATE TABLE `pet_info` (
`id` BIGINT NOT NULL COMMENT '雪花ID',
`cover_img` VARCHAR(255) COMMENT '封面图URL',
`image_list` JSON COMMENT '图片集合',
`geo_point` POINT SRID 4326 COMMENT '地理位置',
`transaction_state` ENUM('pending','paid','delivered','completed','disputed')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
关键点:MySQL 8.0的JSON类型和空间索引大幅简化开发,但要注意MyBatis-Plus对JSON字段的特殊处理
3. 核心模块实现细节
3.1 文件上传的工业级方案
原始代码存在严重安全隐患:
- 未校验文件类型
- 存储路径硬编码
- 无防重放机制
改进后的UploadService核心逻辑:
java复制// 文件类型白名单
private static final Set<String> ALLOWED_EXTENSIONS =
Set.of("jpg", "png", "webp", "gif");
public Strin
