Knife4j 文件上传 multipart/data 同时接受文件和对象,调试时上传文件失效

复制代码
PrizeCreateParam 自定义的java对象 还有 MultipartFile

当二者同时使用RequestPart注解后, 按理来说 knife4j页面应该是 可以显示 文件上传和json填写的

这里prizePic的请求类型是Query显然是错的,因为文件上传不能在url里面

我的knife4j是 4.4.0版本

复制代码
<dependency>
   <groupId>com.github.xiaoymin</groupId>
   <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
   <version>4.4.0</version>
</dependency>

AI的核心修改思路是:

通过 Swagger 注解明确声明每个参数的媒体类型,让 Knife4j 知道「哪个参数是文件、哪个参数是 JSON 对象」,但是AI修改后 主要是 使用Parameter注解,而且生成的代码修改非常长,给接口补充精准的 OpenAPI 3 注解,明确标记每个参数的类型和媒体类型

解决方案:

无意在GitHub上发现了个大佬的解决方案,虽然不是很完美,但是用了很少的代码就 实现了原本的功能

经过试验发现确实是有效的

但是最终展示出的效果 并不是以JSON格式的填写,而是以FROM表单格式的填写方式

可以肯定的是这个就是BUG

Knife4j 4.x 对 OpenAPI3 的 multipart 解析问题 :当接口使用 @RequestPart JSON对象 + @RequestPart MultipartFile

springdoc 生成的 OpenAPI 是正确的(multipart/form-data 下的 object schema)

原生 Swagger UI 能正常显示"文件选择按钮 + JSON 输入框";

但 Knife4j 在二次解析文档时,没有把 JSON 对象正确放进 multipart 的 schema 里,而是当成普通 body 或参数处理,导致文件类型被降级成文本框或变成 raw/query 参数

所以表现异常------不是你的 Controller 写错,而是 Knife4j 4.x 的解析兼容问题。

相关推荐
Foreer黑爷2 分钟前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
身如柳絮随风扬5 分钟前
深入理解 Sentinel:服务雪崩、熔断原理、使用实践与规则持久化
java·微服务·sentinel
dgvri5 分钟前
Spring Boot接收参数的19种方式
java·spring boot·后端
组合缺一6 分钟前
SolonCode CLI 为什么选择 Java 技术栈?
java·开发语言
rOuN STAT6 分钟前
Spring Boot 2.7.x 至 2.7.18 及更旧的版本,漏洞说明
java·spring boot·后端
阿巴斯甜16 分钟前
BinaryOperator的使用:
java
计算机安禾16 分钟前
【Linux从入门到精通】第10篇:软件包管理——Linux如何安装与卸载软件
java·linux·运维·服务器·编辑器
青槿吖25 分钟前
Feign 微服务远程调用指南:告别手写 RestTemplate
java·redis·后端·spring·微服务·云原生·架构
Zzzzmo_29 分钟前
【JavaEE】多线程04—线程池/定时器
java·线程池·定时器·javaee
Makoto_Kimur30 分钟前
Spring用了哪些设计模式?
java·spring·设计模式