当前位置: 首页 > article >正文

Spring Boot 项目 myblog 整理

myblog 项目是一个典型的 Spring Boot 项目,主要包括用户注册、登录、文章管理(创建、查询、更新、删除)等功能。

1. 项目结构与依赖设置

项目初始化与依赖
  • 使用 Spring Initializr 创建项目。
  • 引入必要的依赖包:
    • Spring Boot Web:用于开发 REST API。
    • MyBatis 和 MySQL 驱动:用于数据库交互。
    • Spring Validation:用于验证用户输入。
    • Lombok:减少样板代码。
    • Hibernate Validator:手动加入以支持输入验证。

2. 数据库设计与建表

数据库表设计
  • my_users:用于存储用户信息,包含字段:idnameemailpasswordrole_id 等。
  • my_roles:用于存储用户角色,包含字段:idnamedescription 等。
  • my_articles:用于存储文章信息,包含字段:idtitleauthorcontentcategory_idtagsis_deletedcreatedmodified 等。
SQL 表的相关操作
  • 插入用户和角色:使用插入语句添加初始用户和角色数据。
  • 外键约束与错误:注意在添加用户时,由于外键关系,必须确保角色 ID 存在。

3. 用户模块

用户实体类 (MyUser)
  • 使用 Lombok 注解 @Data@NoArgsConstructor@AllArgsConstructor 简化代码。
  • 添加必要的字段验证注解,例如 @NotBlank@NotNull
用户注册与登录
  • 注册功能:实现用户注册功能,使用 UserService 服务层来处理业务逻辑。
  • 登录功能:实现登录,验证用户名和密码,并通过 TokenService 生成 JWT Token。
用户控制器 (UserController)
  • 注册接口:使用 @PostMapping("/register"),调用 UserService 来进行用户注册。
  • 登录接口:使用 @PostMapping("/login"),调用 UserService 登录并生成 Token,最后将 Token 作为 JSON 响应返回。

4. 文章管理模块

文章实体类 (MyArticle)
  • MyArticle:使用 Lombok 注解简化代码。
    • 字段:包括 idtitleauthorcontentcategoryIdtagsisDeletedcreatedmodified
    • 字段验证:对必要的字段加上验证注解,如 @NotBlank@NotNull
文章控制器 (ArticleController)
  • 添加文章
    • 使用 @PostMapping("/article") 添加新文章。
    • 使用 @Validated 注解对请求参数进行验证,若验证失败,通过 BindingResult 获取错误信息。
  • 查询文章
    • 获取所有文章:使用 @GetMapping("/articles"),不分页。
    • 分页查询文章:使用 @GetMapping("/articles/{pageNum}"),通过传入的页码查询文章列表。
  • 更新文章
    • 更新接口:使用 @PutMapping("/article")
    • 检查传入的文章对象是否包含 ID,并验证其字段。
    • 调用 ArticleService 更新文章。
  • 删除文章
    • 软删除接口:使用 @DeleteMapping("/article/{id}")
    • 实现软删除,通过修改 isDeleted 字段为 2 来实现逻辑删除。
文章服务层 (ArticleService)
  • 添加文章 (add):为文章设置 ID 并存储。
  • 查询所有文章 (findAll):查询所有文章,未分页。
  • 分页查询文章 (getListByPageNum):根据传入的页码计算偏移量来查询分页文章。
  • 文章详情 (detail):根据文章 ID 查询文章详情。
  • 更新文章 (update):更新文章信息。
  • 删除文章 (delete):软删除文章,修改 isDeleted 字段。
文章 Mapper (MyArticleMapper)
  • 使用 MyBatis 注解 @Mapper 定义数据库操作。
  • 新建文章:使用 @Insert 注解插入文章。
  • 查询文章
    • 不分页:使用 @Select("SELECT * FROM my_articles WHERE is_deleted = 1") 查询所有未删除的文章。
    • 分页:使用 @Select("SELECT * FROM my_articles WHERE is_deleted = 1 LIMIT #{offset}, 30") 分页查询。
    • 查询详情:通过文章 id 查询文章详情。
  • 更新文章:使用 @Update 更新文章内容。
  • 软删除文章:使用 @Update("UPDATE my_articles SET is_deleted = 2 WHERE id = #{id}") 实现软删除。

5. 错误处理与验证

输入验证
  • 添加和更新文章:使用 @Validated 注解验证输入数据,并使用 BindingResult 来捕获验证错误。
  • Controller 层:对错误返回相应的错误码和消息,方便前端处理。
全局异常处理
  • 异常处理机制:在每个控制器方法中使用 try-catch 来捕获异常,返回 JsonResultObject,将错误信息统一封装在响应中,确保系统健壮性。

6. Token 处理

  • 登录时生成 Token
    • UserController/login 方法中调用 TokenService 生成 Token,返回给客户端用于后续请求的认证。
  • 权限验证
    • 使用自定义注解和拦截器来验证每个请求是否携带有效的 Token,用于保护需要认证的接口(例如,添加、更新、删除文章)。

7. 项目运行与测试

本地测试
  • 数据库初始化:确保所有的数据库表已经正确创建,并且初始数据(如用户角色)已插入。
  • Postman 测试接口
    • 用户注册与登录:通过 /v1/register/v1/login 测试用户注册和登录功能,登录成功后获取 Token。
    • 文章接口
      • 添加文章:使用 /v1/article 通过 POST 请求添加新文章。
      • 查询文章:通过 /v1/articles/v1/articles/{pageNum} 测试文章列表的查询。
      • 更新与删除文章:分别通过 PUT 和 DELETE 请求测试更新和删除文章。

8. 关键问题与解决方案

  • SQL 外键约束错误:在插入用户数据时确保角色数据已存在,避免外键约束失败。
  • Token 未返回问题:确保登录逻辑中成功生成 Token,并将其正确返回给前端。
  • 验证失败的处理:在控制器中使用 BindingResult 检查参数错误,并及时返回有意义的错误信息。
  • 重复方法定义错误:在 MyArticleMapper 中避免重复的方法定义,保证每个方法的名称唯一且功能明确。

总结

  • 项目基于 Spring Boot,结合了 MyBatis 和 Hibernate Validator 等技术栈,适用于构建一个基本的博客系统。
  • 包含了用户管理和文章管理模块,并实现了增删改查功能。
  • 使用 JWT Token 进行用户身份认证,保证了部分接口的安全性。
  • 在开发过程中,通过单独的 Service 层来处理业务逻辑,将控制器层的职责简化为参数验证与返回结果的封装,确保代码的可维护性和扩展性。

http://www.kler.cn/a/403041.html

相关文章:

  • 科研深度学习:如何精选GPU以优化服务器性能
  • 大数据技术之SparkCore
  • Java语言程序设计 选填题知识点总结
  • PHP实现选择排序
  • 真题-桂城2018年六年级
  • 飞凌嵌入式T113-i开发板RISC-V核的实时应用方案
  • 智能购物时代:AI在电商平台的革命性应用
  • 针对AI增强图像大规模鲁棒性测试的数据集
  • 15分钟学 Go 实战项目六 :统计分析工具项目(30000字完整例子)
  • ssl证书,以 Nginx 为例
  • 如何构建高效的接口自动化测试框架?
  • Halcon 分割之区域生长法
  • 拓展Git相关知识(⭐版控工具⭐)
  • 量化交易系统开发-实时行情自动化交易-3.4.3.3.期货市场深度数据
  • Golang语言整合jwt+gin框架实现token
  • 学习threejs,对模型多个动画切换展示
  • Matlab多输入单输出之倾斜手写数字识别
  • os库的常见使用
  • 星融元与焱融科技AI分布式存储软硬件完成兼容性互认证
  • 13.C++内存管理2(C++ new和delete的使用和原理详解,内存泄漏问题)
  • 数据结构(双向链表——c语言实现)
  • Restful API 规范详解
  • 单片机学习笔记 2. LED灯闪烁
  • c++--------《set 和 map》
  • C++手写PCD文件
  • 使用Kotlin写一个将字符串加密成short数组,然后可以解密还原成原始的字符串的功能