Closed
Description
升级SpringBoot为3.2.4后,同步升级Knife4j到4.5.0后的系列问题如下
1、分组名称不支持中文名称[影响指数:4/5]
2、使用@tag中order字段对控制器排序不生效[影响指数:5/5]
3、无法定义全局错误码信息[影响指数:5/5]
4、控制器层返回数据为xml(目前可解决,解决方式不完美)[影响指数:4/5]
5、新版Knife4j文件上传如何通过注解设置接口参数[影响指数:5/5]
详细问题描述、代码设置及截图等请参见pdf文档:SpringBoot2.7.18升级至3.2.x后的Knife4j的系列问题-v1.0.pdf
如作者有时间,请帮忙看下,不胜感谢!
(2024-04-16 原本想通过在Github附图的二维码加群,发现群在4.14已过期,无法才在Github上提Issues,第一次提,如有不当之处,请指正,感谢!)
Activity
xiaoymin commentedon Apr 16, 2024
感谢反馈,我后面有空看一下
ps:其实通过issues反馈交流更好:)
jamesxujoy commentedon May 23, 2024
文件可以通过这种方式的注解去配置:@parameter(name = "file", description = "文件", required = true, content = @content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE, schema = @Schema(type = "string", format = "binary"))),我试过是可以的。
但问题是如果文件字段是在某个实体类里,这个实体类作为controller方法的参数,那swagger不返回这个文件字段,前端也无法显示。
jmszwzr commentedon May 25, 2024
@jamesxujoy 你用的也是knife4j-openapi3-jakarta-spring-boot-starter4.5.0的版本么?我本地用你这么配置之后,在doc.html打开中还是不能上传文件,有点囧...以下是本地贴图

1.业务代码(knife4j-openapi3-jakarta-spring-boot-starter 4.5.0实现方式)
2.前端访问(knife4j-openapi3-jakarta-spring-boot-starter 4.5.0实现方式)

PS:


旧版knife4j-spring-boot-starter 3.0.3(升级前的前端正常访问)
旧版knife4j-spring-boot-starter 3.0.3(后端配置)
zhangchaoxu commentedon Jun 3, 2024
@jmszwzr 问题5文件上传不显示的问题,反馈一下解决办法,将@RequestParam改为@RequestPart即可。
我尝试了@parameter修改,@PostMaping中定义consumer,都不生效。最后在issue407找到答案。将@RequestParam改为@RequestPart即可。
jmszwzr commentedon Jun 5, 2024
@zhangchaoxu 感谢回复 不过我升级Knife到4.5.0之后,接收file使用的注解还是@RequestPart并没有更改,请查看[1.业务代码(knife4j-openapi3-jakarta-spring-boot-starter 4.5.0实现方式)]
zhangchaoxu commentedon Jun 5, 2024
那就更诡异了,我现在也是用的knife4j-openapi3-jakarta-spring-boot-starter 4.5.0+springboot 3.3.0。
从@RequestParam替换成@RequestPart后,解决了问题。
jmszwzr commentedon Jun 5, 2024
@zhangchaoxu 厉害
,我把我本地接口上的@parameters注解注释掉之后,也是可以的了,原来Knife4j可以自动识别@RequestPart注解;不过这样,对于其他参数,在swagger文档中就没法进行参数说明了,是不是?

zhangchaoxu commentedon Jun 6, 2024
我又试了一下,@parameters是可行的,参数解释也能出来,这么写试试@parameter(name = "file", description = "文件", required = true, in = ParameterIn.DEFAULT, schema = @Schema(name = "file", format = "binary"))
jmszwzr commentedon Jun 6, 2024
@zhangchaoxu 按照兄台的配置,本地也测试成功了!感谢!
jmszwzr commentedon Jun 6, 2024
jmszwzr commentedon Jun 7, 2024
针对问题2已经有解决方法!
在Gitee中翻看到有同类型问题,在Gitee-I7U2I0中"BlueCup"提到:解决了我的问题,我是前端没有出现tags节点,原来是@tag中没有写description,我的排序可以了。
原来我在系统模块中的Controller中所有接口写了description,但是没有文字描述,导致系统模块在Swagger请求中,没出现tags标签,所以导致在类Controller中的@apisupport设置的值不生效!!
后续:为什么不给@tag中的description进行文字描述,前端请求中就出现不了tags标签,进而导致@apisupport失效,确实是个问题哈~ @xiaoymin
jmszwzr commentedon Jun 7, 2024
针对问题3已经得到解决!
见Knife4j从3.0.3升级至4.5.0的记录中的
Knife4jConfig配置
,主要就是在GroupedOpenApi的初始化中,增加addOpenApiCustomizer自定义配置,获取到全部Paths后,使用本地封装的将原来的ApiResponses替换掉即可,目前替换的就是常用的put/get/delete/post四种请求方式。jmszwzr commentedon Jun 7, 2024
针对问题4,本地最新数次重启访问Swagger均未复现,且留待看;现在就只剩下问题1了!
jmszwzr commentedon Jun 18, 2024
@xiaoymin 针对问题1,目前也有了解决办法,在Knife4jConfig配置类中,设置group分组名后,再次设置displayName为中文名称即可,如下:
具体见:SpringBoot3.3.0集成Knife4j4.5.0实战
至此该文档中所列5个问题均得到解决,感谢作者及各位!🙏
[-]关于SpringBoot2.7.18升级到3.2.x后的Knife4j使用的系列问题汇总[/-][+]关于SpringBoot2.7.18升级到3.2.x后的Knife4j使用的系列问题汇总(已全部解决)[/+]2 remaining items