跳到主要内容

v4.5.0版本-2024/01/08

Knife4j 4.5.0版本发布,助力橙单低代码平台OpenAPI3.0规范顺利落地

本次迭代

4.5.0版本主要更新如下:

1、前端i18n增加对日语的支持,感谢一堃通行 ,Gitee#PR98

2、修复EnvironmentPostProcessor中存在defaultProperties与业务冲突的问题,感谢leilei,Gitee#PR100

3、修复addOrderExtension方法报错空指针问题,感谢doublek24Gitee#PR99

4、Spring Boot3 中排序order不生效的问题

5、OpenAPI3规范中未配置springdoc.group-configs.packages-to-scan属性导致的空指针异常Gitee#I8O7E8

6、实体参数,@Schema的description属性显示的异常问题Gitee#I8EVO3Github#690

7、OpenAPI3规范请求类型针对format属性的展示问题Gitee#I8KRWV

8、自定义文档】多服务聚合后如果服务名包含"-"会导致自定义文档页刷新报错Gitee#I8EKAQ

9、移除文档favicon.ico的引用Github#716

橙单企业级插件支持

背景

橙单低代码平台作为Knife4j组件的老朋友,对于Knife4j的推广,应用都提供了极大的帮助和反馈,此次针对橙单低代码平台针对Spring Boot3+OpenAPI3版本的兼容适配,Knife4j也是提供了很好的支撑。

在做企业级插件需求介绍前,先给大家介绍下橙单低代码平台

橙单低代码平台简介:

  • 橙单代码生成工具,可导入多数据源和复杂的表关系,并生成开箱即用的前后端工程代码。
  • 生成后工程代码全部采用主流技术栈搭建,完全遵循阿里巴巴编码规范。
  • 较高的代码注释率,完整的开发部署手册和系列教程,可帮您快速上手完成后续的二次开发工作。
  • VIP 服务和技术交流群,提供在线问题解答,并将您的合理反馈,及时更新到下一版本。

主要技术特点:

  • 前后端技术栈可根据项目规模和客户偏好按需选择,生成后代码保持统一的接口定义规则。
  • 前端模板支持基于 Fragment 和 Block 的灵活布局方式,通过配置即可生成多样化的表单页面。
  • 高质量的前后端工程代码,产品级的代码细节打磨和性能优化,近乎于 0 的代码重复率。
  • 前沿的单表组合式查询,为数据库减负,让您的系统在 PaaS 云平台运行时更具伸缩性。
  • 创新式生成基于主表模式的规范化服务间调用接口,服务组合像搭积木一样轻巧自如。
  • 提供高可配置性的用户权限管理模块,目前已支持按钮级操作权限和标签级显示权限。
  • 菜单级数据过滤权限,多种过滤策略任意组合。Mybatis 拦截器 + JSqlParser 组合,让代码侵入性将至最低。
  • 支持定时任务代码生成,如流水表及其关联表分组聚合计算后批量刷新到统计表。
  • 通过基于qdox的代码分析结果,可以 0 注解生成高准确度的 Postman API 接口文档

官网地址:http://www.orangeforms.com/

需求支撑

在橙单低代码平台中,对于接口的请求请求,橙单做了一层自定义的注解,可以方便开发者以JSON方式提交数据,代码示例如下:


@Operation(summary = "测试一下-MyRequestBody")
@PostMapping(value = "/test/module/upload")
public ResponseEntity<MyBodyTest> test(@MyRequestBody FileRequestVo fileRequestVo, @MyRequestBody FileResp fileResp, HttpServletResponse response){
MyBodyTest myBodyTest=new MyBodyTest();
myBodyTest.setFileResp(fileResp);
myBodyTest.setRequestVo(fileRequestVo);
return ResponseEntity.ok(myBodyTest);
}

橙单提供了自定义注解@MyRequestBody,对于请求参数,可以直接以JSON方式进行请求,而无需定义实体类,最终OpenAPI的接口效果展示如下图:

图1-橙单Plugin支持效果图

通过基于Knife4j个性化插件的支持+OpenAPI3规范的扩展,完成橙单企业级插件的兼容适配,方便橙单的用户能够在Spring Boot3+OpenAPI3规范的场景下,很好的使用Knife4j的接口文档展示。

解决方案

基于Springdoc-openapi项目提供的GlobalOperationCustomizer钩子函数,提供对扩展属性的支持。

springdoc-openapi项目提供了两大核心扩展接口:

  • 🏜️ GlobalOperationCustomizer:针对Operation级别的全局自定义扩展钩子函数,开发者可以对接口中每一个Operation进行扩展自定义实现,或调整,或修改,或增加扩展都行,Knife4j的部分增强特性就是基于此函数实现,可以参考代码Knife4jJakartaOperationCustomizer.java
  • 🏝️ GlobalOpenApiCustomizer:是针对整个OpenAPI级别的,开发者在分组或者分包后,得到的单个OpenAPI实例,开发者可以操纵全局的OpenAPI实例,该OpenAPI对象已经是springdoc解析过的实例对象,例如该issues中的需求,开发者只需要自定义创建新Operation对象,然后通过OpenAPI实例对象进行add添加即可完成此需求,部分扩展可以参考代码:Knife4jOpenApiCustomizer.java
  • 🎠 扩展实现类接口后,注入Spring的容器中即可

详情代码可参考:knife4j-orangeforms-boot3-openapi3

最后

本次4.5.0版本的发布,除了解决一些常规的issues问题,也是非常感谢橙单低代码平台的大力支持

大家如果有低代码平台的需求,可以考虑一下橙单低代码平台!!!

官网地址:http://www.orangeforms.com/

当然,如果对于Knife4j对于各个企业级插件的需求支持,也欢迎大家通过issues或者平台进行反馈!!!