Repository: lmq2582609/minimalist-saas
Branch: master
Commit: 742e613f4a75
Files: 322
Total size: 1.4 MB
Directory structure:
gitextract_koj_vsiu/
├── .gitignore
├── LICENSE
├── README.md
├── minimalist-application/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── minimalist/
│ │ └── application/
│ │ ├── MinimalistBasicApplication.java
│ │ └── config/
│ │ ├── GlobalExceptionHandler.java
│ │ └── satoken/
│ │ ├── SaTokenConfigure.java
│ │ └── SaTokenInterfaceImpl.java
│ └── resources/
│ ├── application-dev.yml
│ ├── application.yml
│ └── logback-dev.xml
├── minimalist-basic/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── minimalist/
│ │ │ └── basic/
│ │ │ ├── config/
│ │ │ │ ├── async/
│ │ │ │ │ ├── AsyncConfig.java
│ │ │ │ │ └── ThreadPoolConfig.java
│ │ │ │ ├── convert/
│ │ │ │ │ ├── FileSizeDeserializer.java
│ │ │ │ │ ├── FileSizeSerializer.java
│ │ │ │ │ └── LongArrJsonSerializer.java
│ │ │ │ ├── dataConfig/
│ │ │ │ │ └── SystemConfigInit.java
│ │ │ │ ├── eDict/
│ │ │ │ │ ├── BeanMethod.java
│ │ │ │ │ ├── EDict.java
│ │ │ │ │ ├── EDictConstant.java
│ │ │ │ │ └── EDictInit.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── BusinessException.java
│ │ │ │ ├── fileHandler/
│ │ │ │ │ ├── FileManager.java
│ │ │ │ │ ├── FileResourcesInit.java
│ │ │ │ │ ├── entity/
│ │ │ │ │ │ ├── LocalFileEntity.java
│ │ │ │ │ │ ├── MinIOFileEntity.java
│ │ │ │ │ │ └── QiNiuFileEntity.java
│ │ │ │ │ └── handler/
│ │ │ │ │ ├── FileHandler.java
│ │ │ │ │ └── impl/
│ │ │ │ │ ├── LocalFileHandler.java
│ │ │ │ │ ├── MinIOFileHandler.java
│ │ │ │ │ └── QiNiuFileHandler.java
│ │ │ │ ├── mybatis/
│ │ │ │ │ ├── GeneratorCodeHandler.java
│ │ │ │ │ ├── InsertFullColumnHandler.java
│ │ │ │ │ ├── MyBatisFlexConfiguration.java
│ │ │ │ │ ├── UpdateFullColumnHandler.java
│ │ │ │ │ └── bo/
│ │ │ │ │ ├── BaseEntity.java
│ │ │ │ │ ├── PageReq.java
│ │ │ │ │ └── PageResp.java
│ │ │ │ ├── redis/
│ │ │ │ │ ├── RedisManager.java
│ │ │ │ │ └── RedissonConfiguration.java
│ │ │ │ ├── resubmit/
│ │ │ │ │ ├── ReSubmit.java
│ │ │ │ │ └── ReSubmitAspect.java
│ │ │ │ ├── swagger/
│ │ │ │ │ ├── ParameterHandler.java
│ │ │ │ │ ├── PropertyHandler.java
│ │ │ │ │ ├── SchemaEnum.java
│ │ │ │ │ ├── SchemaEnumHandler.java
│ │ │ │ │ └── SwaggerConfig.java
│ │ │ │ ├── tenant/
│ │ │ │ │ ├── TenantDatasourceInterceptor.java
│ │ │ │ │ ├── TenantIgnore.java
│ │ │ │ │ ├── TenantIgnoreAspect.java
│ │ │ │ │ ├── TenantInit.java
│ │ │ │ │ └── TenantWebMvcConfig.java
│ │ │ │ └── trace/
│ │ │ │ ├── TraceIdInterceptor.java
│ │ │ │ └── WebMvcConfig.java
│ │ │ ├── controller/
│ │ │ │ ├── ConfigController.java
│ │ │ │ ├── DeptController.java
│ │ │ │ ├── DictController.java
│ │ │ │ ├── FileController.java
│ │ │ │ ├── NoticeController.java
│ │ │ │ ├── PermController.java
│ │ │ │ ├── PostController.java
│ │ │ │ ├── RoleController.java
│ │ │ │ ├── StorageController.java
│ │ │ │ ├── TenantController.java
│ │ │ │ ├── TenantPackageController.java
│ │ │ │ └── UserController.java
│ │ │ ├── entity/
│ │ │ │ ├── enums/
│ │ │ │ │ ├── ConfigEnum.java
│ │ │ │ │ ├── DeptEnum.java
│ │ │ │ │ ├── DictEnum.java
│ │ │ │ │ ├── FileEnum.java
│ │ │ │ │ ├── NoticeEnum.java
│ │ │ │ │ ├── PermEnum.java
│ │ │ │ │ ├── PostEnum.java
│ │ │ │ │ ├── RespEnum.java
│ │ │ │ │ ├── RoleEnum.java
│ │ │ │ │ ├── StatusEnum.java
│ │ │ │ │ ├── StorageEnum.java
│ │ │ │ │ ├── TenantEnum.java
│ │ │ │ │ └── UserEnum.java
│ │ │ │ ├── po/
│ │ │ │ │ ├── MConfig.java
│ │ │ │ │ ├── MDept.java
│ │ │ │ │ ├── MDict.java
│ │ │ │ │ ├── MFile.java
│ │ │ │ │ ├── MNotice.java
│ │ │ │ │ ├── MPerms.java
│ │ │ │ │ ├── MPost.java
│ │ │ │ │ ├── MRole.java
│ │ │ │ │ ├── MRoleDept.java
│ │ │ │ │ ├── MRolePerm.java
│ │ │ │ │ ├── MStorage.java
│ │ │ │ │ ├── MTenant.java
│ │ │ │ │ ├── MTenantDatasource.java
│ │ │ │ │ ├── MTenantPackage.java
│ │ │ │ │ ├── MTenantPackagePerm.java
│ │ │ │ │ ├── MUser.java
│ │ │ │ │ ├── MUserDept.java
│ │ │ │ │ ├── MUserPost.java
│ │ │ │ │ └── MUserRole.java
│ │ │ │ └── vo/
│ │ │ │ ├── config/
│ │ │ │ │ ├── ConfigQueryVO.java
│ │ │ │ │ └── ConfigVO.java
│ │ │ │ ├── dept/
│ │ │ │ │ ├── DeptQueryVO.java
│ │ │ │ │ └── DeptVO.java
│ │ │ │ ├── dict/
│ │ │ │ │ ├── DictCacheVO.java
│ │ │ │ │ ├── DictDataVO.java
│ │ │ │ │ ├── DictInfoVO.java
│ │ │ │ │ ├── DictListVO.java
│ │ │ │ │ ├── DictQueryVO.java
│ │ │ │ │ └── DictVO.java
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileQueryVO.java
│ │ │ │ │ ├── FileUploadBatchVO.java
│ │ │ │ │ ├── FileUploadRespVO.java
│ │ │ │ │ ├── FileUploadVO.java
│ │ │ │ │ └── FileVO.java
│ │ │ │ ├── notice/
│ │ │ │ │ ├── NoticeQueryVO.java
│ │ │ │ │ └── NoticeVO.java
│ │ │ │ ├── perm/
│ │ │ │ │ ├── PermQueryVO.java
│ │ │ │ │ └── PermVO.java
│ │ │ │ ├── post/
│ │ │ │ │ ├── PostQueryVO.java
│ │ │ │ │ └── PostVO.java
│ │ │ │ ├── role/
│ │ │ │ │ ├── RoleQueryVO.java
│ │ │ │ │ └── RoleVO.java
│ │ │ │ ├── storage/
│ │ │ │ │ ├── StorageQueryVO.java
│ │ │ │ │ └── StorageVO.java
│ │ │ │ ├── tenant/
│ │ │ │ │ ├── TenantDatasourceVO.java
│ │ │ │ │ ├── TenantPackageQueryVO.java
│ │ │ │ │ ├── TenantPackageVO.java
│ │ │ │ │ ├── TenantQueryVO.java
│ │ │ │ │ └── TenantVO.java
│ │ │ │ └── user/
│ │ │ │ ├── ImageCaptchaVO.java
│ │ │ │ ├── RePasswordVO.java
│ │ │ │ ├── UserInfoVO.java
│ │ │ │ ├── UserLoginReqVO.java
│ │ │ │ ├── UserQueryVO.java
│ │ │ │ ├── UserSettingVO.java
│ │ │ │ └── UserVO.java
│ │ │ ├── manager/
│ │ │ │ ├── TenantManager.java
│ │ │ │ └── UserManager.java
│ │ │ ├── mapper/
│ │ │ │ ├── MConfigMapper.java
│ │ │ │ ├── MDeptMapper.java
│ │ │ │ ├── MDictMapper.java
│ │ │ │ ├── MFileMapper.java
│ │ │ │ ├── MNoticeMapper.java
│ │ │ │ ├── MPermsMapper.java
│ │ │ │ ├── MPostMapper.java
│ │ │ │ ├── MRoleDeptMapper.java
│ │ │ │ ├── MRoleMapper.java
│ │ │ │ ├── MRolePermMapper.java
│ │ │ │ ├── MStorageMapper.java
│ │ │ │ ├── MTenantDatasourceMapper.java
│ │ │ │ ├── MTenantMapper.java
│ │ │ │ ├── MTenantPackageMapper.java
│ │ │ │ ├── MTenantPackagePermMapper.java
│ │ │ │ ├── MUserDeptMapper.java
│ │ │ │ ├── MUserMapper.java
│ │ │ │ ├── MUserPostMapper.java
│ │ │ │ └── MUserRoleMapper.java
│ │ │ ├── mq/
│ │ │ │ ├── SystemConfigSyncConsumer.java
│ │ │ │ └── TenantDatasourceSyncConsumer.java
│ │ │ ├── service/
│ │ │ │ ├── ConfigService.java
│ │ │ │ ├── DeptService.java
│ │ │ │ ├── DictService.java
│ │ │ │ ├── EDictService.java
│ │ │ │ ├── FileService.java
│ │ │ │ ├── NoticeService.java
│ │ │ │ ├── PermService.java
│ │ │ │ ├── PostService.java
│ │ │ │ ├── RoleService.java
│ │ │ │ ├── StorageService.java
│ │ │ │ ├── TenantPackageService.java
│ │ │ │ ├── TenantService.java
│ │ │ │ ├── UserService.java
│ │ │ │ └── impl/
│ │ │ │ ├── ConfigServiceImpl.java
│ │ │ │ ├── DeptServiceImpl.java
│ │ │ │ ├── DictServiceImpl.java
│ │ │ │ ├── EDictServiceImpl.java
│ │ │ │ ├── FileServiceImpl.java
│ │ │ │ ├── NoticeServiceImpl.java
│ │ │ │ ├── PermServiceImpl.java
│ │ │ │ ├── PostServiceImpl.java
│ │ │ │ ├── RoleServiceImpl.java
│ │ │ │ ├── StorageServiceImpl.java
│ │ │ │ ├── TenantPackageServiceImpl.java
│ │ │ │ ├── TenantServiceImpl.java
│ │ │ │ └── UserServiceImpl.java
│ │ │ └── utils/
│ │ │ ├── Add.java
│ │ │ ├── CommonConstant.java
│ │ │ ├── RedisKeyConstant.java
│ │ │ ├── TenantUtil.java
│ │ │ ├── TextUtil.java
│ │ │ ├── UnqIdUtil.java
│ │ │ ├── Update.java
│ │ │ └── ValidateUtil.java
│ │ └── resources/
│ │ └── mappers/
│ │ ├── MConfigMapper.xml
│ │ ├── MDeptMapper.xml
│ │ ├── MDictMapper.xml
│ │ ├── MFileMapper.xml
│ │ ├── MNoticeMapper.xml
│ │ ├── MPermsMapper.xml
│ │ ├── MPostMapper.xml
│ │ ├── MRoleDeptMapper.xml
│ │ ├── MRoleMapper.xml
│ │ ├── MRolePermMapper.xml
│ │ ├── MStorageMapper.xml
│ │ ├── MTenantDatasourceMapper.xml
│ │ ├── MTenantMapper.xml
│ │ ├── MTenantPackageMapper.xml
│ │ ├── MTenantPackagePermMapper.xml
│ │ ├── MUserDeptMapper.xml
│ │ ├── MUserMapper.xml
│ │ ├── MUserPostMapper.xml
│ │ └── MUserRoleMapper.xml
│ └── test/
│ └── java/
│ └── com/
│ └── minimalist/
│ └── basic/
│ └── MinimalistBasicApplicationTests.java
├── minimalist-vue3/
│ ├── .gitignore
│ ├── index.html
│ ├── package.json
│ ├── public/
│ │ └── tinymce/
│ │ └── skins/
│ │ ├── content/
│ │ │ ├── dark/
│ │ │ │ └── content.css
│ │ │ ├── default/
│ │ │ │ └── content.css
│ │ │ ├── document/
│ │ │ │ └── content.css
│ │ │ ├── tinymce-5/
│ │ │ │ └── content.css
│ │ │ ├── tinymce-5-dark/
│ │ │ │ └── content.css
│ │ │ └── writer/
│ │ │ └── content.css
│ │ ├── langs/
│ │ │ └── zh-Hans.js
│ │ └── ui/
│ │ ├── oxide/
│ │ │ ├── content.css
│ │ │ ├── content.inline.css
│ │ │ ├── skin.css
│ │ │ └── skin.shadowdom.css
│ │ ├── oxide-dark/
│ │ │ ├── content.css
│ │ │ ├── content.inline.css
│ │ │ ├── skin.css
│ │ │ └── skin.shadowdom.css
│ │ ├── tinymce-5/
│ │ │ ├── content.css
│ │ │ ├── content.inline.css
│ │ │ ├── skin.css
│ │ │ └── skin.shadowdom.css
│ │ └── tinymce-5-dark/
│ │ ├── content.css
│ │ ├── content.inline.css
│ │ ├── skin.css
│ │ └── skin.shadowdom.css
│ ├── src/
│ │ ├── App.vue
│ │ ├── api/
│ │ │ ├── config.js
│ │ │ ├── dept.js
│ │ │ ├── dict.js
│ │ │ ├── file.js
│ │ │ ├── notice.js
│ │ │ ├── perm.js
│ │ │ ├── post.js
│ │ │ ├── role.js
│ │ │ ├── storage.js
│ │ │ ├── tenant.js
│ │ │ ├── tenantPackage.js
│ │ │ └── user.js
│ │ ├── assets/
│ │ │ └── globalStyle.css
│ │ ├── axios.js
│ │ ├── components/
│ │ │ ├── MHeader.vue
│ │ │ ├── MSider.vue
│ │ │ ├── PageTabList.vue
│ │ │ ├── dictValue/
│ │ │ │ └── index.vue
│ │ │ ├── iconSelect/
│ │ │ │ ├── FunctionalIcons.vue
│ │ │ │ └── index.vue
│ │ │ ├── menuTree/
│ │ │ │ └── index.vue
│ │ │ ├── pagination/
│ │ │ │ └── index.vue
│ │ │ ├── tinymceEditor/
│ │ │ │ └── index.vue
│ │ │ └── uploadFile/
│ │ │ └── index.vue
│ │ ├── directives/
│ │ │ ├── permission.js
│ │ │ └── role.js
│ │ ├── main.js
│ │ ├── pages/
│ │ │ ├── 404.vue
│ │ │ ├── basic/
│ │ │ │ ├── config/
│ │ │ │ │ ├── ConfigDetail.vue
│ │ │ │ │ ├── ConfigEdit.vue
│ │ │ │ │ └── ConfigMgt.vue
│ │ │ │ ├── dept/
│ │ │ │ │ ├── DeptDetail.vue
│ │ │ │ │ ├── DeptEdit.vue
│ │ │ │ │ └── DeptMgt.vue
│ │ │ │ ├── dict/
│ │ │ │ │ ├── DictDetail.vue
│ │ │ │ │ ├── DictEdit.vue
│ │ │ │ │ └── DictMgt.vue
│ │ │ │ ├── file/
│ │ │ │ │ ├── FileMgt.vue
│ │ │ │ │ └── FileSelect.vue
│ │ │ │ ├── notice/
│ │ │ │ │ ├── NoticeDetail.vue
│ │ │ │ │ ├── NoticeEdit.vue
│ │ │ │ │ └── NoticeMgt.vue
│ │ │ │ ├── perm/
│ │ │ │ │ ├── PermDetail.vue
│ │ │ │ │ ├── PermEdit.vue
│ │ │ │ │ └── PermMgt.vue
│ │ │ │ ├── post/
│ │ │ │ │ ├── PostDetail.vue
│ │ │ │ │ ├── PostEdit.vue
│ │ │ │ │ └── PostMgt.vue
│ │ │ │ ├── role/
│ │ │ │ │ ├── RoleDetail.vue
│ │ │ │ │ ├── RoleEdit.vue
│ │ │ │ │ └── RoleMgt.vue
│ │ │ │ ├── storage/
│ │ │ │ │ ├── Local.vue
│ │ │ │ │ ├── Minio.vue
│ │ │ │ │ ├── QiNiu.vue
│ │ │ │ │ ├── StorageDetail.vue
│ │ │ │ │ ├── StorageEdit.vue
│ │ │ │ │ └── StorageMgt.vue
│ │ │ │ ├── system/
│ │ │ │ │ └── Swagger.vue
│ │ │ │ ├── tenant/
│ │ │ │ │ ├── TenantDetail.vue
│ │ │ │ │ ├── TenantEdit.vue
│ │ │ │ │ └── TenantMgt.vue
│ │ │ │ ├── tenantPackage/
│ │ │ │ │ ├── TenantPackageDetail.vue
│ │ │ │ │ ├── TenantPackageEdit.vue
│ │ │ │ │ └── TenantPackageMgt.vue
│ │ │ │ └── user/
│ │ │ │ ├── UserDetail.vue
│ │ │ │ ├── UserEdit.vue
│ │ │ │ ├── UserMgt.vue
│ │ │ │ └── UserSetting.vue
│ │ │ ├── container.vue
│ │ │ ├── index.vue
│ │ │ └── login.vue
│ │ ├── router/
│ │ │ └── index.js
│ │ ├── store/
│ │ │ ├── index.js
│ │ │ └── module/
│ │ │ └── sys-store.js
│ │ └── utils/
│ │ ├── cookie.js
│ │ ├── dict.js
│ │ ├── msg.js
│ │ └── sys.js
│ └── vite.config.js
├── pom.xml
└── resources/
└── sql/
└── mysql/
├── 2024-12-03 ~ 2025-03-12期间的SQL变更(第一次使用本项目忽略).sql
└── minimalist_全部sql,如果是第一次使用本项目直接执行这个.sql
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
######################################################################
# Build Tools
.gradle
/build/
!gradle/wrapper/gradle-wrapper.jar
target/
!.mvn/wrapper/maven-wrapper.jar
######################################################################
# IDE
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/*
nbbuild/
dist/
nbdist/
.nb-gradle/
######################################################################
# Others
*.log
*.xml.versionsBackup
*.swp
!*/build/*.java
!*/build/*.html
!*/build/*.xml
/files/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2023 小太阳
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
极简多租户管理系统
基于SpringBoot3+Vue3前后端分离的Java快速开发脚手架
## 项目简介
极简多租户管理系统是一个多租户管理系统,基于SpringBoot3+Vue3的前后端分离的后台开发脚手架,具备一些常用的基础功能。
## 项目地址
演示地址:[https://www.jjian.com.cn](https://www.jjian.com.cn)
文档地址:[https://apebbs.cn/docs/minimalist-saas/1.0.0/introduction.html](https://apebbs.cn/docs/minimalist-saas/1.0.0/introduction.html)
Gitee:[https://gitee.com/marlife/minimalist-saas](https://gitee.com/marlife/minimalist-saas)
Github:[https://github.com/lmq2582609/minimalist-saas](https://github.com/lmq2582609/minimalist-saas)
管理员账号/密码: `admin`/`111111`
租户账号/密码:`dongdong`/`111111`
## 技术选型
### 前端
| 名称 | 版本 | 说明 |
| ----------- | ------ | ----------------------- |
| Vue | 3.2.47 | 用于构建用户界面的 JavaScript 框架 |
| Vite | 4.3.2 | 前端构建工具 |
| Arco-Design | 2.45.3 | 字节出的 Vue3 UI 组件库 |
| Windicss | 3.5.6 | CSS 框架 |
| Vue-Router | 4.1.6 | Vue官方路由 |
| Vueuse | 10.1.2 | 基于Composition API的实用函数库 |
| Axios | 1.4.0 | 基于Promise的HTTP客户端 |
| Pinia | 2.0.36 | Vue 状态管理 |
| Vue-Cropper | 1.0.9 | 图片裁剪 |
| Nprogress | 0.2.0 | 进度条 |
| Tinymce | 6.6.0 | 富文本编辑器 |
### 后端
| 名称 | 版本 | 说明 |
| -------------------------- | ------ | ----------------------- |
| Java | 17 | 无需多言 |
| SpringBoot | 3.1.1 | Java开发框架 |
| Redisson | 3.36.0 | Redis Java客户端 |
| Mysql | 8.0.33 | Mysql数据库驱动 |
| Mybatis-flex | 1.9.7 | ORM框架 |
| Hutool | 5.8.32 | Java工具库 |
| Satoken | 1.39.0 | Java权限认证框架 |
| Knife4j | 4.1.0 | Swagger2和OpenAPI3增强解决方案 |
| Mica-xss | 3.3.2 | xss防护 |
## 中间件
| 名称 | 版本 | 说明 |
| ----- | ------ | -------- |
| mysql | 8.0.24 | 关系型数据库 |
| redis | 7.2.4 | NoSQL数据库 |
## 演示图
================================================
FILE: minimalist-application/pom.xml
================================================
com.cn
minimalist-saas
1.0.0-SNAPSHOT
4.0.0
minimalist-application
minimalist-application Maven Webapp
启动
jar
com.cn
minimalist-basic
1.0.0-SNAPSHOT
${project.package.name}
org.springframework.boot
spring-boot-maven-plugin
repackage
com.minimalist.application.MinimalistBasicApplication
org.projectlombok
lombok
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.source}
${maven.compiler.target}
${project.package.encoding}
--enable-preview
src/main/resources
true
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
dev
true
dev
prod
prod
================================================
FILE: minimalist-application/src/main/java/com/minimalist/application/MinimalistBasicApplication.java
================================================
package com.minimalist.application;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.minimalist.**.mapper")
@SpringBootApplication(scanBasePackages = {"com.minimalist.*", "cn.hutool.extra.spring"})
public class MinimalistBasicApplication {
public static void main(String[] args) {
SpringApplication.run(MinimalistBasicApplication.class, args);
}
}
================================================
FILE: minimalist-application/src/main/java/com/minimalist/application/config/GlobalExceptionHandler.java
================================================
package com.minimalist.application.config;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.exception.NotPermissionException;
import com.minimalist.basic.config.exception.BusinessException;
import com.minimalist.basic.entity.enums.RespEnum;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.mica.xss.core.XssException;
import org.springframework.core.NestedExceptionUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentConversionNotSupportedException;
import java.util.List;
import java.util.Set;
import java.util.StringJoiner;
/**
* 全局异常处理
*/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 参数异常
* @param e 异常
* @return 响应
*/
@ExceptionHandler(value = {IllegalArgumentException.class, MethodArgumentNotValidException.class, ConstraintViolationException.class})
public ResponseEntity