news 2026/6/26 2:01:53

Spring boot 后端项目公共基础模块的理解学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring boot 后端项目公共基础模块的理解学习

我们再开发后端代码的时候都会遇到工程化的问题,这个时候将公共的基础设施挪出来分包就非常有必要,就是我们的公共基础模块。

一、模块概述

common是我的项目中的公共基础模块,提供所有业务共享的基础设施。该模块不依赖任何业务模块,被所有其他模块依赖

目录结构

common/
├── src/main/java/com/aryi/common/
│ ├── annotation/ # 自定义注解
│ │ └── DataScope.java
│ ├── config/ # 配置类
│ │ └── JacksonConfig.java
│ ├── entity/ # 实体类
│ │ └── BaseEntity.java
│ ├── exception/ # 异常处理
│ │ ├── BusinessException.java
│ │ └── GlobalExceptionHandler.java
│ ├── result/ # 返回结果封装
│ │ ├── Result.java
│ │ └── PageResult.java
│ └── util/ # 工具类
│ └── RsaUtils.java
└── pom.xml

二、类关系

核心类关系

Controller层的所有模块都会依赖于common层中的统一返回Result<T>、PageResult<T>、业务异常BusinessException等等这些类来帮助我们更好的去处理后端的功能和逻辑,接下来我来详细说说我的公共基础设施层都是怎么去使用的

实体继承类(BaseEntity)

BaseEntity作为所有业务实体的父类,提供通用的字段和行为。使用MyBatis Plus的注解实现自动填充和逻辑删除,通过继承此类所有实体都将获得统一的审计字段和序列化支持。

设计的目的

1.统一实体结构,减少重复代码

2.自动填充创建/更新时间爱和操作人

3.统一逻辑删除实现

id: 主键,自增策略 createTime: 创建时间,插入时自动填充 updateTime: 更新时间,插入和更新时自动填充 createBy: 创建人ID,插入时自动填充 updateBy: 更新人ID,插入和更新时自动填充 deleted: 删除标识,0-未删除,1-已删除(逻辑删除)

配置与数据流向(JacksonConfig全局配置类 与 DataScope数据权限过滤注解)

JacksonConfig

统一配置Java 8日期时间类型序列化/反序列化格式,避免前端接收日期格式不一致的问题。配置后,所有通过Jackson序列化的LocalDateTime和LocalDate都会统一使用指定格式。

主要解决的问题:

1.LocalDateTime默认序列化为数组格式[2024, 1, 1, 12, 0, 0]

2.前端日期格式不统一导致解析失败

3.时区问题导致的时间差

LocalDateTime → "2024-01-01 12:00:00" LocalDate → "2024-01-01"

DataScope

用于标记需要进行数据权限控制的Mapper方法,配合MyBatis Plus拦截器实现数据范围过滤。通过部门标和用户表的别名,动态拼接WHERE条件,实现不同角色看到不同数据的需求

典型应用场景:

管理员:查看所有数据

部门管理员:查看本部门数据

普通用户:仅查看自己的数据

// 统一实体结构 → 减少重复代码 // 自动填充时间/操作人 → 减轻开发负担 // 逻辑删除 → 数据安全,可恢复 {@code @DataScope(deptAlias = "d", userAlias = "u")} List<SysUser> selectUserList(SysUser user);

业务异常类(BusinessExeption)

用于封装业务逻辑层抛出的异常,携带自定义错误码和错误信息。与GlobalExceptionHandler配合使用,实现异常的统一处理和友好返回。

设计特点:

1.继承RuntimeExcetion,无需强制try-catch

2.携带错误码,自定义错误状态

3.通过@Getter注解自动生成getter方法

参数校验失败(如:用户名已存在) 业务规则不满足(如:余额不足) 资源不存在(如:用户不存在)

全局异常处理器(GlobalExceptionHandler )

使用@RestControllerAdvice注解,统一捕获并处理Controller层抛出的所有异常。将异常转换为统一的Result格式返回给前端,避免之间暴露堆栈信息,同时提供友好的错误提示

处理的异常类型:

1.BusinessException:业务异常,携带自定义错误码和信息

2.NotLoginException:未登录异常(Sa-Token)

3.NotPermissionERxception:无权限异常

4.NotRoleException:无角色异常

5.MethodArgumentNotValidException:参数校验异常(@Valid)

6.BindException:参数绑定异常

7.RuntimeException:运行时异常

8.IllegalArgumentExeption:非法参数异常

9.Exception:兜底异常处理

// 参数校验失败 throw new BusinessException("用户名已存在"); // 业务规则不满足 throw new BusinessException(400, "余额不足"); // 资源不存在 throw new BusinessException(404, "用户不存在");

统一返回结果类(Result)

所有Controller接口的统一返回格式,封装响应码、响应信息和响应数据。提供静态工厂方法,简化返回结果的创建

字段说明:

1.code:响应码,200表示成功,其他表示失败

2.message:响应信息,描述操作结果

3.data:响应数据,泛型类型,可包含任意数据结构

返回格式示例: // 成功(无数据) { "code": 200, "message": "操作成功", "data": null } // 成功(有数据) { "code": 200, "message": "操作成功", "data": { ... } } // 失败(默认错误码) { "code": 500, "message": "操作失败", "data": null } // 失败(自定义错误码) { "code": 400, "message": "参数校验失败", "data": null } // 查询成功 return Result.ok(user); // 删除成功 return Result.ok(); // 参数校验失败 return Result.fail(400, "用户名不能为空");

分页返回结果类(PageResult)

统一封装分页查询结果,提供多种静态工厂方法便捷创建实例。与MyBatis Plus的IPage接口无缝对接,简化分页结果的处理。

字段说明:

list:当前页数据列表

total:总记录数

page:当前页码

pageSize:每页条数

// 从MyBatis Plus分页 IPage<User> page = userMapper.selectPage(new Page<>(1, 10), wrapper); return Result.ok(PageResult.of(page)); // 返回空结果 return Result.ok(PageResult.empty());

RSA加解密工具类(RsaUtils)

提供RSA非对称加密和解密功能,支持分段加密处理大数据。以及AES+RSA混合加密方案(推荐用于大数据加密场景)。

核心特性:

1.标准RSA加密:公钥加密、私钥解密;私钥加密、公钥解密

2.分段加密:支持超过RSA单次加密限制的数据

3.混合加密:AES加密数据 + RSA加密AES密钥,兼顾安全性和性能

4.密钥长度:2048为(标准安全级别)

技术参数:

1.RSA密钥长度:2048位

2.AES密钥长度:256位

3.加密模式:RSA/ECB/PKCS1Padding

4.AES模式:AES/GCM/NoPadding(带认证的加密)

5.编码:Base64

// 登录密码加密传输 // 敏感数据存储加密 // API接口数据加密 // 前后端密钥交换

我的公共基础层的设计模式

统一返回模式

全局异常处理模式

实体类继承模式

总结

基本每次写些新项目这些公共基础都会写,写博客也是为了节省时间

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 2:01:26

Orca-2-7B数学助教实战:轻量模型+结构化提示+公式校验

1. 项目概述&#xff1a;用Orca-2-7B打造一个真正能算对题的数学助教你有没有试过让一个大模型解一道初中数学应用题&#xff0c;结果它逻辑链条清晰、步骤完整、语言流畅&#xff0c;但最后一步心算把“128”算成“94”&#xff1f;或者在算复利时&#xff0c;明明题目说“按半…

作者头像 李华
网站建设 2026/6/26 2:01:19

企业级 Agent 产品架构:从单次对话到多轮编排的商业化跃迁

企业级 Agent 产品架构&#xff1a;从单次对话到多轮编排的商业化跃迁一、当 Agent 走出实验室——企业场景下的三重断裂 AI Agent 在 Demo 中表现惊艳&#xff1a;一个简单的 ReAct 循环加上工具调用&#xff0c;就能完成看似复杂的任务。但当 Agent 产品真正进入企业场景&…

作者头像 李华
网站建设 2026/6/26 1:59:00

EVE-NG V7 PC安装部署教程(最细教程)

本篇为**EVE-NG V7 精简安装教程**。相比V6版本&#xff0c;V7解锁多项专业版免费功能&#xff0c;优化仿真引擎与设备兼容性&#xff0c;运行更稳定&#xff0c;是网工考证、实验测试、项目模拟的优质网络仿真平台。 本文整合视频全套实操流程&#xff0c;结尾附上视频。 镜…

作者头像 李华
网站建设 2026/6/26 1:57:56

次梯度下降收敛率分析:基于分层结构与保守集值场

1. 项目概述&#xff1a;当优化问题遇上“非光滑”与“分层”在机器学习和数值优化的世界里&#xff0c;梯度下降法及其变种无疑是基石般的存在。我们习惯了在光滑、可微的函数曲面上&#xff0c;沿着负梯度方向稳步下山&#xff0c;寻找最优解。然而&#xff0c;现实世界中的许…

作者头像 李华
网站建设 2026/6/26 1:57:15

Pandas 与 NumPy 协同数据处理:大规模特征管线的内存优化与向量化实践

Pandas 与 NumPy 协同数据处理&#xff1a;大规模特征管线的内存优化与向量化实践 一、当特征管线遇上内存墙&#xff1a;Pandas 大表操作的工程瓶颈 在工业级机器学习项目中&#xff0c;特征工程管线的数据处理效率直接影响实验迭代速度。一个典型的性能瓶颈&#xff1a;在用户…

作者头像 李华