是否可以在 Swagger 中使用模型上传 MultipartFile? 在评论 415 Unsupported Media Type Resolved 中

问题描述

我正在使用最后一个(也是唯一一个

 <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
 </dependency>

带弹簧靴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.1</version>
    <relativePath/> <!-- lookup parent from repository -->
 </parent>

我希望能够在一个控制器中上传文件和模型,所以我创建了一个

image

在这种情况下,在 swagger-ui 上我只看到没有模型的文件上传

image

我在邮递员那里试过这个案例,效果很好

image

这是一个错误吗?或者我应该添加一些其他注释以使其工作?

解决方法

问题出在 Docket Bean 中的配置类中。 在这里,我定义了到我的控制器的路由,以从 swagger-ui 中排除其他人。 问题出在 DocumentationType,OpenApi3.0 正在维护多类型文件上传,而 Swagger2 没有。

enter image description here

我面临的下一个问题是:

415 不支持的媒体类型

分辨率:

第一种方式: 如果您将使用 postman/javaScript 框架 -> 您必须定义每个 RequestPart 的媒体类型(实际上不需要文件,文件会自动设置)。 邮递员中的示例: enter image description here

第二种方式:是实现octet-stream的维护,因为如果请求部分没有content-type头,spring默认在AbstractMessageConverterMethodArgumentResolver.class中设置它。 (我正在使用 spring-boot-starter-parent 2.4.1 -> spring-webmvc 5.3.2Y

所以这是我发现的 2 个案例(将响应 JSON 映射到 DTO):

1 个案例(不推荐): 设置对 JSON 转换器的支持: enter image description here

2 种情况: 定义新的 Converter 类,它肯定适用于所需的类(在我的情况下是 MDVersionDTO.class),并且肯定会像 octet-stream 那样来实现它,override canRead() 方法。 enter image description here