Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于SpringBoot2.7.18升级到3.2.x后的Knife4j使用的系列问题汇总(已全部解决) #775

Closed
jmszwzr opened this issue Apr 16, 2024 · 14 comments

Comments

@jmszwzr
Copy link

jmszwzr commented Apr 16, 2024

升级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,第一次提,如有不当之处,请指正,感谢!)

@xiaoymin
Copy link
Owner

感谢反馈,我后面有空看一下

ps:其实通过issues反馈交流更好:)

@jamesxujoy
Copy link

文件可以通过这种方式的注解去配置:@parameter(name = "file", description = "文件", required = true, content = @content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE, schema = @Schema(type = "string", format = "binary"))),我试过是可以的。
但问题是如果文件字段是在某个实体类里,这个实体类作为controller方法的参数,那swagger不返回这个文件字段,前端也无法显示。

@jmszwzr
Copy link
Author

jmszwzr commented May 25, 2024

@jamesxujoy 你用的也是knife4j-openapi3-jakarta-spring-boot-starter4.5.0的版本么?我本地用你这么配置之后,在doc.html打开中还是不能上传文件,有点囧...以下是本地贴图
1.业务代码(knife4j-openapi3-jakarta-spring-boot-starter 4.5.0实现方式)
01

2.前端访问(knife4j-openapi3-jakarta-spring-boot-starter 4.5.0实现方式)
02

PS:
旧版knife4j-spring-boot-starter 3.0.3(升级前的前端正常访问)
03
旧版knife4j-spring-boot-starter 3.0.3(后端配置)
04

@zhangchaoxu
Copy link

@jmszwzr 问题5文件上传不显示的问题,反馈一下解决办法,将@RequestParam改为@RequestPart即可。

我尝试了@parameter修改,@PostMaping中定义consumer,都不生效。最后在issue407找到答案。将@RequestParam改为@RequestPart即可。

@jmszwzr
Copy link
Author

jmszwzr commented Jun 5, 2024

@zhangchaoxu 感谢回复 不过我升级Knife到4.5.0之后,接收file使用的注解还是@RequestPart并没有更改,请查看[1.业务代码(knife4j-openapi3-jakarta-spring-boot-starter 4.5.0实现方式)]

@zhangchaoxu
Copy link

那就更诡异了,我现在也是用的knife4j-openapi3-jakarta-spring-boot-starter 4.5.0+springboot 3.3.0。
@RequestParam替换成@RequestPart后,解决了问题。

image
image

@jmszwzr
Copy link
Author

jmszwzr commented Jun 5, 2024

@zhangchaoxu 厉害 05796003,我把我本地接口上的@parameters注解注释掉之后,也是可以的了,原来Knife4j可以自动识别@RequestPart注解;不过这样,对于其他参数,在swagger文档中就没法进行参数说明了,是不是?
001

@zhangchaoxu
Copy link

我又试了一下,@parameters是可行的,参数解释也能出来,这么写试试@parameter(name = "file", description = "文件", required = true, in = ParameterIn.DEFAULT, schema = @Schema(name = "file", format = "binary"))

@jmszwzr
Copy link
Author

jmszwzr commented Jun 6, 2024

@zhangchaoxu 按照兄台的配置,本地也测试成功了!感谢!

@jmszwzr

This comment was marked as resolved.

@jmszwzr
Copy link
Author

jmszwzr commented Jun 7, 2024

针对问题2已经有解决方法!

在Gitee中翻看到有同类型问题,在Gitee-I7U2I0中"BlueCup"提到:解决了我的问题,我是前端没有出现tags节点,原来是@tag中没有写description,我的排序可以了。

原来我在系统模块中的Controller中所有接口写了description,但是没有文字描述,导致系统模块在Swagger请求中,没出现tags标签,所以导致在类Controller中的@apisupport设置的值不生效!!

后续:为什么不给@tag中的description进行文字描述,前端请求中就出现不了tags标签,进而导致@apisupport失效,确实是个问题哈~ @xiaoymin

@jmszwzr
Copy link
Author

jmszwzr commented Jun 7, 2024

针对问题3已经得到解决!

Knife4j从3.0.3升级至4.5.0的记录中的Knife4jConfig配置,主要就是在GroupedOpenApi的初始化中,增加addOpenApiCustomizer自定义配置,获取到全部Paths后,使用本地封装的将原来的ApiResponses替换掉即可,目前替换的就是常用的put/get/delete/post四种请求方式。

@jmszwzr
Copy link
Author

jmszwzr commented Jun 7, 2024

针对问题4,本地最新数次重启访问Swagger均未复现,且留待看;现在就只剩下问题1了!

@jmszwzr
Copy link
Author

jmszwzr commented Jun 18, 2024

@xiaoymin 针对问题1,目前也有了解决办法,在Knife4jConfig配置类中,设置group分组名后,再次设置displayName为中文名称即可,如下:

// 系统接口
@Bean
public GroupedOpenApi api1() {
    // 创建了一个api接口的分组
    return GroupedOpenApi.builder()
            // 分组名称,使用英文,中文访问异常(使用displayName设置中文名,避免直接使用group设置中文时访问异常)
            .group("01-sys-api")
            .displayName("01-系统接口") // 使用displayName设置中文接口分组名时,group仍不可或缺
            .packagesToScan("cn.keyidea.sys")
            // 自定义全局响应码
            .addOpenApiCustomizer((this::setCustomStatusCode))
            .build();
}

具体见:SpringBoot3.3.0集成Knife4j4.5.0实战


至此该文档中所列5个问题均得到解决,感谢作者及各位!🙏

@jmszwzr jmszwzr changed the title 关于SpringBoot2.7.18升级到3.2.x后的Knife4j使用的系列问题汇总 关于SpringBoot2.7.18升级到3.2.x后的Knife4j使用的系列问题汇总(已全部解决) Jun 18, 2024
@jmszwzr jmszwzr closed this as completed Jun 18, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants