|
| 1 | +# v4.5.0版本-2024/01/08 |
| 2 | + |
| 3 | +Knife4j 4.5.0版本发布,助力橙单低代码平台OpenAPI3.0规范顺利落地 |
| 4 | + |
| 5 | +## 本次迭代 |
| 6 | + |
| 7 | +4.5.0版本主要更新如下: |
| 8 | + |
| 9 | +1、前端i18n增加对日语的支持,感谢[一堃通行](https://gitee.com/mao-junkun) ,[Gitee#PR98](https://gitee.com/xiaoym/knife4j/pulls/98) |
| 10 | + |
| 11 | +2、修复EnvironmentPostProcessor中存在defaultProperties与业务冲突的问题,感谢leilei,[Gitee#PR100](https://gitee.com/xiaoym/knife4j/pulls/100) |
| 12 | + |
| 13 | +3、修复addOrderExtension方法报错空指针问题,感谢doublek24[Gitee#PR99](https://gitee.com/xiaoym/knife4j/pulls/99) |
| 14 | + |
| 15 | +4、Spring Boot3 中排序order不生效的问题 |
| 16 | + |
| 17 | +5、OpenAPI3规范中未配置`springdoc.group-configs.packages-to-scan`属性导致的空指针异常[Gitee#I8O7E8](https://gitee.com/xiaoym/knife4j/issues/I8O7E8) |
| 18 | + |
| 19 | +6、实体参数,`@Schema`的description属性显示的异常问题[Gitee#I8EVO3](https://gitee.com/xiaoym/knife4j/issues/I8EVO3)、[Github#690](https://github.com/xiaoymin/knife4j/issues/690) |
| 20 | + |
| 21 | +7、OpenAPI3规范请求类型针对`format`属性的展示问题[Gitee#I8KRWV](https://gitee.com/xiaoym/knife4j/issues/I8KRWV) |
| 22 | + |
| 23 | +8、自定义文档】多服务聚合后如果服务名包含"-"会导致自定义文档页刷新报错[Gitee#I8EKAQ](https://gitee.com/xiaoym/knife4j/issues/I8EKAQ) |
| 24 | + |
| 25 | +9、移除文档`favicon.ico`的引用[Github#716](https://github.com/xiaoymin/knife4j/issues/716) |
| 26 | + |
| 27 | +## 橙单企业级插件支持 |
| 28 | + |
| 29 | +### 背景 |
| 30 | + |
| 31 | +**橙单低代码平台**作为`Knife4j`组件的老朋友,对于Knife4j的推广,应用都提供了极大的帮助和反馈,此次针对橙单低代码平台针对Spring Boot3+OpenAPI3版本的兼容适配,Knife4j也是提供了很好的支撑。 |
| 32 | + |
| 33 | +在做企业级插件需求介绍前,先给大家介绍下橙单低代码平台 |
| 34 | + |
| 35 | +**橙单低代码**平台简介: |
| 36 | + |
| 37 | +- 橙单代码生成工具,可导入多数据源和复杂的表关系,并生成开箱即用的前后端工程代码。 |
| 38 | +- 生成后工程代码全部采用主流技术栈搭建,完全遵循阿里巴巴编码规范。 |
| 39 | +- 较高的代码注释率,完整的开发部署手册和系列教程,可帮您快速上手完成后续的二次开发工作。 |
| 40 | +- VIP 服务和技术交流群,提供在线问题解答,并将您的合理反馈,及时更新到下一版本。 |
| 41 | + |
| 42 | +主要技术特点: |
| 43 | + |
| 44 | +- 前后端技术栈可根据项目规模和客户偏好按需选择,生成后代码保持统一的接口定义规则。 |
| 45 | +- 前端模板支持基于 Fragment 和 Block 的灵活布局方式,通过配置即可生成多样化的表单页面。 |
| 46 | +- 高质量的前后端工程代码,产品级的代码细节打磨和性能优化,近乎于 0 的代码重复率。 |
| 47 | +- 前沿的单表组合式查询,为数据库减负,让您的系统在 PaaS 云平台运行时更具伸缩性。 |
| 48 | +- 创新式生成基于主表模式的规范化服务间调用接口,服务组合像搭积木一样轻巧自如。 |
| 49 | +- 提供高可配置性的用户权限管理模块,目前已支持按钮级操作权限和标签级显示权限。 |
| 50 | +- 菜单级数据过滤权限,多种过滤策略任意组合。Mybatis 拦截器 + JSqlParser 组合,让代码侵入性将至最低。 |
| 51 | +- 支持定时任务代码生成,如流水表及其关联表分组聚合计算后批量刷新到统计表。 |
| 52 | +- 通过基于qdox的代码分析结果,可以 0 注解生成高准确度的 Postman API 接口文档 |
| 53 | + |
| 54 | +官网地址:[http://www.orangeforms.com/](http://www.orangeforms.com/) |
| 55 | + |
| 56 | +### 需求支撑 |
| 57 | + |
| 58 | +在橙单低代码平台中,对于接口的请求请求,橙单做了一层自定义的注解,可以方便开发者以JSON方式提交数据,代码示例如下: |
| 59 | + |
| 60 | +```java |
| 61 | + |
| 62 | +@Operation(summary = "测试一下-MyRequestBody") |
| 63 | +@PostMapping(value = "/test/module/upload") |
| 64 | +public ResponseEntity<MyBodyTest> test(@MyRequestBody FileRequestVo fileRequestVo, @MyRequestBody FileResp fileResp, HttpServletResponse response){ |
| 65 | + MyBodyTest myBodyTest=new MyBodyTest(); |
| 66 | + myBodyTest.setFileResp(fileResp); |
| 67 | + myBodyTest.setRequestVo(fileRequestVo); |
| 68 | + return ResponseEntity.ok(myBodyTest); |
| 69 | +} |
| 70 | +``` |
| 71 | + |
| 72 | +橙单提供了自定义注解`@MyRequestBody`,对于请求参数,可以直接以JSON方式进行请求,而无需定义实体类,最终OpenAPI的接口效果展示如下图: |
| 73 | + |
| 74 | + |
| 75 | + |
| 76 | +通过基于Knife4j个性化插件的支持+OpenAPI3规范的扩展,完成橙单企业级插件的兼容适配,方便橙单的用户能够在Spring Boot3+OpenAPI3规范的场景下,很好的使用Knife4j的接口文档展示。 |
| 77 | + |
| 78 | +### 解决方案 |
| 79 | + |
| 80 | +基于Springdoc-openapi项目提供的`GlobalOperationCustomizer`钩子函数,提供对扩展属性的支持。 |
| 81 | + |
| 82 | +springdoc-openapi项目提供了两大核心扩展接口: |
| 83 | + |
| 84 | +- 🏜️ `GlobalOperationCustomizer`:针对Operation级别的全局自定义扩展钩子函数,开发者可以对接口中每一个Operation进行扩展自定义实现,或调整,或修改,或增加扩展都行,Knife4j的部分增强特性就是基于此函数实现,可以参考代码[Knife4jJakartaOperationCustomizer.java](https://gitee.com/xiaoym/knife4j/blob/dev/knife4j/knife4j-openapi3-jakarta-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/extension/Knife4jJakartaOperationCustomizer.java) |
| 85 | +- 🏝️ `GlobalOpenApiCustomizer`:是针对整个OpenAPI级别的,开发者在分组或者分包后,得到的单个OpenAPI实例,开发者可以操纵全局的OpenAPI实例,该OpenAPI对象已经是springdoc解析过的实例对象,例如该issues中的需求,开发者只需要自定义创建新Operation对象,然后通过OpenAPI实例对象进行add添加即可完成此需求,部分扩展可以参考代码:[Knife4jOpenApiCustomizer.java](https://gitee.com/xiaoym/knife4j/blob/dev/knife4j/knife4j-openapi3-jakarta-spring-boot-starter/src/main/java/com/github/xiaoymin/knife4j/spring/extension/Knife4jOpenApiCustomizer.java) |
| 86 | +- 🎠 扩展实现类接口后,注入Spring的容器中即可 |
| 87 | + |
| 88 | +详情代码可参考:[knife4j-orangeforms-boot3-openapi3](https://gitee.com/xiaoym/swagger-bootstrap-ui-demo/tree/master/knife4j-orangeforms-boot3-openapi3) |
| 89 | + |
| 90 | +## 最后 |
| 91 | + |
| 92 | +本次4.5.0版本的发布,除了解决一些常规的issues问题,也是非常感谢橙单低代码平台的大力支持 |
| 93 | + |
| 94 | +大家如果有低代码平台的需求,可以考虑一下橙单低代码平台!!! |
| 95 | + |
| 96 | +官网地址:[http://www.orangeforms.com/](http://www.orangeforms.com/) |
| 97 | + |
| 98 | +当然,如果对于Knife4j对于各个企业级插件的需求支持,也欢迎大家通过issues或者平台进行反馈!!! |
0 commit comments