关于spring:多部分文件api中不支持的媒体类型

Unsupported Media Type from multi part file api

它总是从邮递员那里错误地给出415个不支持的媒体类型。头包含多部分/表单数据,其边界如下面的curl调用中所示。还尝试用RequestBody替换RequestPart,但没有成功。

当使用file part时,我们是否需要以任何不同的方式调用Spring5中的多部分文件上传API?

再控制器:

1
2
3
4
5
6
 @PostMapping(value ="/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public void uploads(@RequestPart("filePart") Flux<Part> fileparts) {

     ....

}

卷曲:

1
2
3
4
5
6
7
curl -X POST \
  http://localhost:8080/upload \
  -H 'accept: application/json' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -H 'postman-token: 2e850843-13d0-32d3-8734-227242da3303' \
  -F [email protected]

输出:

1
2
3
"status": 415,
"error":"Unsupported Media Type",
"message":"Content type 'text/plain' not supported",

编辑

但是,将uploads参数从@RequestPart("filePart") Flux fileparts更改为@RequestParam("file") MultipartFile file是有效的。

我们不能对requestpart使用相同的curl调用吗?


问题是由于pom.xml同时添加了SpringWebMVC和SpringWebFlux作为依赖项。似乎spring-webmvcspring-webflux不能一起启用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 <dependency>
        <groupId>org.springframework.boot</groupId>
        spring-boot-starter-web</artifactId>
        <version>${spring.boot.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                spring-webmvc</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        spring-boot-starter-webflux</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>