Spring Boot 3 + Vue 3 全栈项目骨架搭建实战:独立开发者的标准化脚手架
一、为什么需要项目骨架
很多独立开发者有一个通病:每开一个新项目,就从零开始搭一遍环境。建项目、配依赖、写配置文件、搭登录模块……每次重复劳动消耗大量精力。
我的做法是维护一套标准化的项目骨架,新项目直接复制后改业务逻辑即可。目前这套骨架支撑了我三个线上项目:
- 一纸云深(情绪治愈小程序)
- 云深不知处(个人技术博客)
- 无羡技术(个人作品站)
本文完整分享这套骨架的设计思路和关键代码。
二、技术选型
| 层面 | 技术 | 版本 |
|---|---|---|
| 后端框架 | Spring Boot | 3.2.5 |
| JDK | OpenJDK | 17+ |
| ORM | MyBatis-Plus | 3.5.7 |
| 数据库 | MySQL | 8.0 |
| JWT | jjwt | 0.12.5 |
| 前端框架 | Vue 3 | 3.x |
| UI | Element Plus | 最新 |
| 构建工具 | Maven | 3.9+ |
三、后端骨架实现
3.1 项目结构
com.wuxian/ ├── WuxianApplication.java ├── common/ │ ├── base/BaseEntity.java │ ├── config/CorsConfig.java │ ├── config/SecurityConfig.java │ ├── config/MyBatisPlusConfig.java │ ├── exception/BusinessException.java │ ├── exception/GlobalExceptionHandler.java │ └── result/ApiResult.java ├── system/ │ ├── controller/AuthController.java │ ├── entity/SysUser.java │ ├── mapper/SysUserMapper.java │ ├── service/SysUserService.java │ └── util/JwtUtil.java └── {module}/ ├── controller/ ├── service/ ├── mapper/ ├── entity/ ├── dto/ └── vo/3.2 统一返回结果 ApiResult(核心)
@Data@NoArgsConstructor@AllArgsConstructorpublicclassApiResult<T>{privateintcode;privateStringmessage;privateTdata;publicstatic<T>ApiResult<T>success(Tdata){returnnewApiResult<>(200,"success",data);}publicstatic<T>ApiResult<T>error(intcode,Stringmessage){returnnewApiResult<>(code,message,null);}}⚠️ 注意事项:不要使用
Map.of("code", 200, "data", null)这种方式返回,Java 17+ 的Map.of()不允许 null 值,会直接抛出NullPointerException。必须使用HashMap或统一的响应类。
3.3 全局异常处理
@RestControllerAdvicepublicclassGlobalExceptionHandler{@ExceptionHandler(MethodArgumentNotValidException.class)publicApiResult<Void>handleValidation(MethodArgumentNotValidExceptione){Stringmsg=e.getBindingResult().getFieldErrors()