swagger-ui提交請求,請求不包含name值,造成後臺無法進行接受參數。
@Operation(description = "上傳文件",tags = "上傳") @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public BaseResponseDataVo<UploadFileModel> uploadFile(@Parameter(style = ParameterStyle.FORM,explode = Explode.TRUE) MultipartFile multipartFile){ String yearMonthDay = DateFormatUtils.format(new Date(), "yyyyMMdd"); return null; }
// 就算把@Parameter換成 @Parameter(name = "multipartFile",schema = @Schema(type = "string",format = "binary")) 也不行,使用@ApiParam也不會提交攜帶name屬性名
//swagger的@RequestBody和spring的RequestBod依舊解決不了問題
// swagger的@RequestBody(content = @Content(mediaType = "application/octet-stream",schema = @Schema(type = "string",format = "binary",name = "file"))) 也解決不了問題
// 把@Parameter註解換成swagger1.5.X的@ApiParam(name = "multipartFile",value = "文件對象")註解,也依舊無果
說明:我指的name值就是form表單input元素的name值,沒有這個值你後臺接收不到的
經過多次嘗試無果後,再@Parameter註解位置再添加一個 @RequestPart("file") 註解即可解決swagger提交請求無name值的問題
@RequestParam註解DOC文檔翻譯:
指示方法參數應綁定到Web請求參數的註釋。
在Spring MVC和Spring WebFlux中支持註釋的處理程序方法,如下所示:
* 在Spring MVC中,“request parameters”映射到查詢參數,表單數據和多部分請求中的零件。 這是因爲Servlet API將查詢參數和表單數據組合到稱爲“parameters”的單個映射中,並且包括對請求正文(request body)的自動解析。
* 在Spring WebFlux中,“request parameters”僅映射到查詢參數。 要處理所有3種查詢,表單數據和多部分數據,可以將數據綁定到使用ModelAttribute註釋的命令對象。
如果方法參數類型爲Map並指定了請求參數名稱,則假定適當的轉換策略可用,請求參數值將轉換爲Map。
如果方法參數爲Map <String,String>或MultiValueMap <String,String>並且未指定參數名稱,則將使用所有請求參數名稱和值填充map參數。
@RequestPart註解DOC文檔翻譯:
可用於將“ multipart / form-data”請求的一部分與方法參數關聯的註釋。
支持的方法參數類型包括MultipartFile和Spring的MultipartResolver抽象,javax.servlet.http.Part和Servlet 3.0多部分請求結合,或者對於其他任何方法參數,該部分的內容都通過HttpMessageConverter傳遞,並考慮到請求部分的“ Content-Type”標頭。這類似於@RequestBody根據非分段常規請求的內容來解析參數的操作。
請注意,@ RequestParam批註還可用於將“ multipart / form-data”請求的一部分與支持相同方法參數類型的方法參數相關聯。
主要區別在於,當方法參數不是字符串或原始MultipartFile / Part時,@ RequestParam依賴於通過註冊的Converter或PropertyEditor進行的類型轉換,而RequestPart則依賴於HttpMessageConverters的考慮到請求部分的“ Content-Type”標頭。 RequestParam可能與名稱-值表單字段一起使用,而RequestPart可能與包含更復雜內容的部分一起使用,例如JSON,XML)。