文件上传 multipart/data 同时接受文件和对象,调试时上传文件失效
Describe the bug 当定义multipart/data类型的请求,同时接收文件和json对象时,文件上传按钮没有了,且变成了url的query参数;图1为原生swagger的行为,是预期的,图二是knife4j的行为,是被认为bug的。是否knife4j解析上出现了问题,或者有没有其他注解方式能够使knife4j按预期工作。
类似issu https://github.com/xiaoymin/knife4j/issues/544
To Reproduce
1.依赖版本:
我在多次尝试文件和对象同时出现在请求参数并没有找到knife4j正确加载文件和json对象的方法,但以下方法可以以表单格式正确加载文件和自定义类对象: 对象加@ParameterObject注解且不加@RequestBody或@RequestPart,文件加@RequestPart注解,此时文档可按请求数据类型为multipart/form-data正常显示,如下图:
我在多次尝试文件和对象同时出现在请求参数并没有找到knife4j正确加载文件和json对象的方法,但以下方法可以以表单格式正确加载文件和自定义类对象: 对象加@ParameterObject注解且不加@RequestBody或@RequestPart,文件加@RequestPart注解,此时文档可按请求数据类型为multipart/form-data正常显示,如下图:
![]()
@lurfen 试了下,这种方式@ParameterObject修饰的对象并不是以json方式传参,而是将对象中的每个属性当作multipart/form-data中的一个参数。并没有像原生swagger一样工作。
我在多次尝试文件和对象同时出现在请求参数并没有找到knife4j正确加载文件和json对象的方法,但以下方法可以以表单格式正确加载文件和自定义类对象: 对象加@ParameterObject注解且不加@RequestBody或@RequestPart,文件加@RequestPart注解,此时文档可按请求数据类型为multipart/form-data正常显示,如下图:
![]()
@lurfen 试了下,这种方式@ParameterObject修饰的对象并不是以json方式传参,而是将对象中的每个属性当作multipart/form-data中的一个参数。并没有像原生swagger一样工作。
对的,我想表达的就是我没有找到让knife4j像原始swagger那样以json传参的方式,只找到我上面提到的方式来通过multipart/form-data表单格式传参,其他方式会导致接口文档没有选择文件按钮
upload(@RequestPart MultipartFile file, @Valid AppUploadDTO body)
这在knife4j 3.0.3中还能被正确识别为form-data形式; 到了knife4j 4.5.0后 就变成raw格式了, 而且file 还是文本框不能选择文件
我现在是 upload(@RequestPart MultipartFile file,@ParameterObject @Valid AppUploadDTO body) 可以跟原先类似
但是现在@ParameterObject 无法正确识别dto里面的字段类型
现在是配合@Schema的type来显性指定类型
upload(@RequestPart MultipartFile file, @Valid AppUploadDTO body)这在knife4j 3.0.3中还能被正确识别为form-data形式;到了knife4j 4.5.0后 就变成raw格式了,而且file 还是文本框不能选择文件 我现在是 可以跟原先类似 但是现在@ParameterObject无法正确识别dto里面的字段类型 现在是配合的type来显性指定类型upload(@RequestPart MultipartFile file,@ParameterObject @Valid AppUploadDTO body)
还发现一个问题,开启default-flat-param-object: true后所有@RequestPart MultipartFile file都没了
