问题描述
我有一个 API 用于上传具有以下签名的多个文件 - 接收一个多部分文件列表和一个请求对象。
@ApiOperation(consumes=MediaType.MULTIPART_FORM_DATA_VALUE)
@PostMapping("/upload")
public void uploadMultipleFiles(@RequestParam("req") RequestDTO request,@RequestParam("files") List<multipartfile> files) {}
当我使用 Postman 测试这个 API 时它可以工作,但是当我尝试使用 swagger 时,我注意到内容类型作为 application/json 传递,并且 API 给出错误“当前请求不是多部分”。我尝试向 @ApiOperation 添加消耗,但内容类型仍然是 application/json。
解决方法
OpenAPI 3.x 中的文件用 application/octet-stream
表示更好。
我使用以下方法解决了这个问题
@Operation( // Swagger/OpenAPI 3.x annotation to describe the endpoint
summary = "Small summary of the end-point",description = "A detailed description of the end-point"
)
@PostMapping(
value = "/uploads",consumes = {MediaType.MULTIPART_FORM_DATA_VALUE} // Note the consumes in the mapping
)
public void uploadMultipleFiles (
// ------------ Multipart Object ------------
@Parameter(description = "Additional request data") // Swagger/OpenAPI annotation
@RequestParam("req") RequestDTO request,// Spring annotation
// ------------ File uploads go next ------------
@Parameter(
description = "Files to be uploaded",content = @Content(mediaType = MediaType.APPLICATION_OCTET_STREAM_VALUE) // Won't work without OCTET_STREAM as the mediaType.
)
@RequestParam("files") List<MultipartFile> files // Spring annotation
)
有关 OpenAPI 3 规范中文件上传的更多详细信息,请参见 here