diff --git a/README.md b/README.md index ed67f4cd..06159f05 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,36 @@ # ContiNew Admin 中后台管理框架 -[![License](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](https://github.com/Charles7c/continew-admin/blob/dev/LICENSE) -![SNAPSHOT](https://img.shields.io/badge/Release-v1.0.0-%23ff3f59.svg) -[![GitHub Repo stars](https://img.shields.io/github/stars/Charles7c/continew-admin?style=social)](https://github.com/Charles7c/continew-admin) -[![GitHub forks](https://img.shields.io/github/forks/Charles7c/continew-admin?style=social)](https://github.com/Charles7c/continew-admin) -[![Gitee Repo stars](https://gitee.com/Charles7c/continew-admin/badge/star.svg?theme=white)](https://gitee.com/Charles7c/continew-admin) -[![Gitee forks](https://gitee.com/Charles7c/continew-admin/badge/fork.svg?theme=white)](https://gitee.com/Charles7c/continew-admin) + +License + + +Release + + +GitHub stars + + +GitHub forks + + +Gitee stars + + +Gitee forks + -📚 [在线文档](https://doc.charles7c.top) | ✨ [提交需求](https://doc.charles7c.top/require) | 🚀 [演示地址](https://cnadmin.charles7c.top)(账号/密码:admin/admin123) +📚 在线文档 | ✨ 提交需求 | 🚀 演示地址(账号/密码:admin/admin123) ## 简介 -ContiNew Admin 中后台管理框架/脚手架,Continue New Admin,持续以最新流行技术栈构建,拥抱变化,迭代优化。当前阶段采用的技术栈:Vue3、TypeScript、Arco Design Vue、Spring Boot、Undertow、Sa-Token、JWT、MariaDB、MyBatis Plus、Redis、Redisson、Easy Excel、Hutool 等。 +ContiNew Admin 中后台管理框架/脚手架,Continue New Admin,持续以最新流行技术栈构建,拥抱变化,迭代优化。当前采用的技术栈:Vue3、TypeScript、Arco Design Vue、Spring Boot、Undertow、Sa-Token、JWT、MariaDB、MyBatis Plus、Redis、Redisson、Easy Excel、Hutool 等。 ## 项目源码 | 开源平台 | 源码地址 | | ------------- | ------------------------------------------- | -| GitHub | https://github.com/Charles7c/continew-admin | -| Gitee(码云) | https://gitee.com/Charles7c/continew-admin | +| GitHub | https://github.com/Charles7c/continew-admin | +| Gitee(码云) | https://gitee.com/Charles7c/continew-admin | ## 主要特性 @@ -29,7 +41,7 @@ ContiNew Admin 中后台管理框架/脚手架,Continue New Admin,持续以 - 提供一套校验工具实践,另根据实际需要,基于 Hutool 扩展部分工具类(能 PR 到 Hutool 的已尽量 PR) - 支持 API 级别的功能权限与数据权限,可自定义操作 - 前后端统一异常拦截处理,统一输出异常,避免繁琐的判断 -- 良好的代码、配置文件结构和命名,完善的代码注释,遵循阿里巴巴 [《Java开发手册(黄山版)》](https://github.com/Charles7c/continew-admin/blob/dev/code-style/Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C(%E9%BB%84%E5%B1%B1%E7%89%88).pdf)的代码规范 +- 良好的代码、配置文件结构和命名,完善的代码注释,遵循阿里巴巴 《Java开发手册(黄山版)》 的代码规范 - 提供多项实用基础配置,例如:Jackson 针对日期、通用枚举的序列化、反序列化配置,统一线程池配置... - 通过 Liquibase 管理数据库脚本版本记录 - 更多细节及实践,敬请探索与关注 @@ -38,13 +50,13 @@ ContiNew Admin 中后台管理框架/脚手架,Continue New Admin,持续以 > v1.x 开发和 v2.x 开发同步进行中。小步快跑,快速迭代。 > -> 详细进度请查看 [GitHub Project](https://github.com/Charles7c/continew-admin/projects) +> 详细进度请查看 GitHub Project **v2.0.0:** :fire: 升级并适配 Spring Boot 3.x。 - [ ] 依赖升级:升级并适配 Spring Boot 3.x - [ ] 依赖升级:其他依赖升级 -- [ ] 计划对接 [FlowLong](https://gitee.com/aizuda/flowlong) 纯国产工作流引擎 +- [ ] 计划对接 FlowLong 纯国产工作流引擎 - [ ] 其他需求汇集中... **v1.2.0:** 第三方服务支持。 @@ -243,26 +255,26 @@ continew-admin | 名称 | 版本 | 简介 | | :----------------------------------------------------------- | :----------- | :----------------------------------------------------------- | -| [Vue](https://cn.vuejs.org/) | 3.2.45 | 渐进式 JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架。 | -| [TypeScript](https://www.typescriptlang.org/zh/) | 4.9.4 | TypeScript 是微软开发的一个开源的编程语言,通过在 JavaScript 的基础上添加静态类型定义构建而成。 | -| [Arco Design Vue](https://arco.design/vue/docs/start) | 2.40.1 | 字节跳动推出的前端 UI 框架,样式美观,组件丰富。 | -| [Spring Boot](https://spring.io/projects/spring-boot) | 2.7.8 | 简化新 Spring 应用的初始搭建以及开发过程。 | -| [Undertow](https://undertow.io/) | 2.2.22.Final | 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。 | -| [Sa-Token + JWT](https://sa-token.dev33.cn/) | 1.34.0 | 轻量级 Java 权限认证框架,让鉴权变得简单、优雅。 | -| [MariaDB](https://mariadb.org/) | 10.10.2 | MySQL 的一个分支,主要由开源社区在维护,完全兼容 MySQL,包括 API 和命令行,能轻松成为 MySQL 的代替品。 | -| [MyBatis Plus](https://baomidou.com/) | 3.5.3.1 | MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。 | -| [dynamic-datasource-spring-boot-starter](https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611) | 3.6.1 | 基于 Spring Boot 的快速集成多数据源的启动器。 | +| Vue | 3.2.45 | 渐进式 JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架。 | +| TypeScript | 4.9.4 | TypeScript 是微软开发的一个开源的编程语言,通过在 JavaScript 的基础上添加静态类型定义构建而成。 | +| Arco Design Vue | 2.40.1 | 字节跳动推出的前端 UI 框架,样式美观,组件丰富。 | +| Spring Boot | 2.7.10 | 简化新 Spring 应用的初始搭建以及开发过程。 | +| Undertow | 2.2.23.Final | 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。 | +| Sa-Token + JWT | 1.34.0 | 轻量级 Java 权限认证框架,让鉴权变得简单、优雅。 | +| MariaDB | 10.10.2 | MySQL 的一个分支,主要由开源社区在维护,完全兼容 MySQL,包括 API 和命令行,能轻松成为 MySQL 的代替品。 | +| MyBatis Plus | 3.5.3.1 | MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。 | +| dynamic-datasource-spring-boot-starter | 3.6.1 | 基于 Spring Boot 的快速集成多数据源的启动器。 | | Hikari | 4.0.3 | JDBC 连接池,号称 “史上最快连接池”,SpringBoot 在 2.0 之后,采用的默认数据库连接池就是 Hikari。 | -| [mysql-connector-j](https://dev.mysql.com/doc/connector-j/8.0/en/) | 8.0.31 | MySQL Java 驱动。 | -| [P6Spy](https://github.com/p6spy/p6spy) | 3.9.1 | SQL 性能分析组件。 | -| [Liquibase](https://github.com/liquibase/liquibase) | 4.9.1 | 用于管理数据库版本,跟踪、管理和应用数据库变化。 | -| [Redis](https://redis.io/) | 6.2.7 | 高性能的 key-value 数据库。 | -| [Redisson](https://github.com/redisson/redisson/wiki/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D) | 3.19.0 | 不仅仅是一个 Redis Java 客户端,同其他 Redis Java 客户端有着很大的区别,相比之下其他客户端提供的功能还仅仅停留在作为数据库驱动层面上,比如仅针对 Redis 提供连接方式,发送命令和处理返回结果等。而 Redisson 充分的利用了 Redis 键值数据库提供的一系列优势,基于 Java 实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。 | -| [Easy Excel](https://easyexcel.opensource.alibaba.com/) | 3.2.0 | 一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。 | +| mysql-connector-j | 8.0.32 | MySQL Java 驱动。 | +| P6Spy | 3.9.1 | SQL 性能分析组件。 | +| Liquibase | 4.9.1 | 用于管理数据库版本,跟踪、管理和应用数据库变化。 | +| Redis | 6.2.7 | 高性能的 key-value 数据库。 | +| Redisson | 3.20.0 | 不仅仅是一个 Redis Java 客户端,同其他 Redis Java 客户端有着很大的区别,相比之下其他客户端提供的功能还仅仅停留在作为数据库驱动层面上,比如仅针对 Redis 提供连接方式,发送命令和处理返回结果等。而 Redisson 充分的利用了 Redis 键值数据库提供的一系列优势,基于 Java 实用工具包中常用接口,为使用者提供了一系列具有分布式特性的常用工具类。使得原本作为协调单机多线程并发程序的工具包获得了协调分布式多机多线程并发系统的能力,大大降低了设计和研发大规模分布式系统的难度。同时结合各富特色的分布式服务,更进一步简化了分布式环境中程序相互之间的协作。 | +| Easy Excel | 3.2.1 | 一个基于 Java 的、快速、简洁、解决大文件内存溢出的 Excel 处理工具。 | | Easy Captcha | 1.6.2 | Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 | -| [Knife4j](https://doc.xiaominfo.com/) | 4.0.0 | 前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案。本项目使用的是 [knife4j-openapi3-spring-boot-starter](https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/tree/master/knife4j-springdoc-openapi-demo) 基于 OpenAPI3 规范,在 Spring Boot < 3.0.0-M1 的单体架构下可以直接引用此 starter,该模块包含了 UI 部分,底层基于 springdoc-openapi 项目。 | -| [Hutool](https://www.hutool.cn/) | 5.8.11 | 小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。 | -| [Lombok](https://projectlombok.org/) | 1.18.24 | 在 Java 开发过程中用注解的方式,简化了 JavaBean 的编写,避免了冗余和样板式代码,让编写的类更加简洁。 | +| Knife4j | 4.1.0 | 前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案。本项目使用的是 knife4j-openapi3-spring-boot-starter 基于 OpenAPI3 规范,在 Spring Boot < 3.0.0-M1 的单体架构下可以直接引用此 starter,该模块包含了 UI 部分,底层基于 springdoc-openapi 项目。 | +| Hutool | 5.8.16 | 小而全的 Java 工具类库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。 | +| Lombok | 1.18.26 | 在 Java 开发过程中用注解的方式,简化了 JavaBean 的编写,避免了冗余和样板式代码,让编写的类更加简洁。 | ## 部分系统截图 @@ -388,12 +400,12 @@ yarn dev ## 特别鸣谢 -- 感谢 [JetBrains](https://www.jetbrains.com/) 提供的 [非商业开源软件开发授权](https://www.jetbrains.com/shop/eform/opensource) -- 感谢 [Arco Design Pro](http://pro.arco.design/) 开箱即用的中后台前端解决方案 -- 感谢 [MyBatis Plus](https://github.com/baomidou/mybatis-plus)、[Sa-Token](https://github.com/dromara/sa-token) 、[Easy Excel](https://github.com/alibaba/easyexcel)、[Knife4j](https://github.com/xiaoymin/knife4j)、[Hutool](https://github.com/dromara/hutool) 等国产开源组件作者为国内开源世界作出的贡献 -- 感谢 [ELADMIN](https://github.com/elunez/eladmin)、[RuoYi-Vue-Plus](https://github.com/dromara/RuoYi-Vue-Plus)、[RuoYi-Vue3](https://github.com/yangzongzhuan/RuoYi-Vue3) 提供的诸多成熟方案,致敬各位作者为开源世界作出的贡献 +- 感谢 JetBrains 提供的 非商业开源软件开发授权 +- 感谢 Arco Design Pro 开箱即用的中后台前端解决方案 +- 感谢 MyBatis PlusSa-TokenEasy ExcelKnife4jHutool 等国产开源组件作者为国内开源世界作出的贡献 +- 感谢 ELADMINRuoYi-Vue-PlusRuoYi-Vue3 提供的诸多成熟方案,致敬各位作者为开源世界作出的贡献 ## License -- 遵循 [Apache-2.0](https://github.com/Charles7c/continew-admin/blob/dev/LICENSE) 开源许可协议 -- Copyright © 2022-present [Charles7c](https://blog.charles7c.top) \ No newline at end of file +- 遵循 Apache-2.0 开源许可协议 +- Copyright © 2022-present Charles7c \ No newline at end of file diff --git a/continew-admin-common/pom.xml b/continew-admin-common/pom.xml index dc6ac7b5..6d1e73d8 100644 --- a/continew-admin-common/pom.xml +++ b/continew-admin-common/pom.xml @@ -132,11 +132,6 @@ limitations under the License. com.github.xiaoymin knife4j-openapi3-spring-boot-starter - - - org.springdoc - springdoc-openapi-ui - diff --git a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java index a6e31aad..cb7be2f9 100644 --- a/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java +++ b/continew-admin-common/src/main/java/top/charles7c/cnadmin/common/config/WebMvcConfiguration.java @@ -25,6 +25,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.CacheControl; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.cors.CorsConfiguration; @@ -108,11 +109,16 @@ public class WebMvcConfiguration implements WebMvcConfigurer { */ @Override public void extendMessageConverters(List> converters) { + // 自定义 converters 时,需要手动在最前面添加 ByteArrayHttpMessageConverter + // 否则 Spring Doc OpenAPI 的 /*/api-docs/**(例如:/v3/api-docs/default)接口响应内容会变为 Base64 编码后的内容,最终导致接口文档解析失败 + // 详情请参阅:https://github.com/springdoc/springdoc-openapi/issues/2143 + converters.add(new ByteArrayHttpMessageConverter()); + converters.removeIf(MappingJackson2HttpMessageConverter.class::isInstance); if (Objects.isNull(mappingJackson2HttpMessageConverter)) { - converters.add(0, new MappingJackson2HttpMessageConverter()); + converters.add(new MappingJackson2HttpMessageConverter()); } else { - converters.add(0, mappingJackson2HttpMessageConverter); + converters.add(mappingJackson2HttpMessageConverter); } } } diff --git a/continew-admin-webapi/src/main/resources/application.yml b/continew-admin-webapi/src/main/resources/application.yml index 78815b2a..aac72404 100644 --- a/continew-admin-webapi/src/main/resources/application.yml +++ b/continew-admin-webapi/src/main/resources/application.yml @@ -51,13 +51,14 @@ springdoc: path: /swagger-ui.html tags-sorter: alpha operations-sorter: alpha + show-extensions: true api-docs: enabled: ${springdoc.swagger-ui.enabled} path: /v3/api-docs group-configs: - group: 'default' paths-to-match: '/**' - packages-to-scan: top.charles7c.cnadmin.webapi + packages-to-scan: top.charles7c.cnadmin.webapi.controller ## 接口文档增强配置 knife4j: enable: true diff --git a/pom.xml b/pom.xml index f56ee7ca..19f56fc5 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ limitations under the License. org.springframework.boot spring-boot-starter-parent - 2.7.8 + 2.7.10 @@ -51,12 +51,12 @@ limitations under the License. 3.9.1 - 3.2.0 + 3.2.1 2.7.6 - 4.0.0 - 3.19.0 + 4.1.0 + 3.20.0 1.6.2 - 5.8.11 + 5.8.16 1.0.0