springboot+knife4j+swagger3 ファイルアップロードドメインをアップロードできません
1 問題となる現象
springboot、knife4j、および swagger3 の統合後、swagger 上のファイル アップロード インターフェイスのアップロード ドメインをエクスポートできず、デバッグを実行できません。コードは次のとおりです。
@PostMapping(value = "/upload")
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
public ApiResult<UploadInfoVo> upload(MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}
Swagger ページにはパラメーター情報がありません。
2つのソリューション
@RequestPart アノテーションは次のように使用できます。
@PostMapping(value = "/upload")
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
public ApiResult<UploadInfoVo> upload(@RequestPart("uploadFile") MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}
swaggerでのページは以下の通りで、デバッグページのアップロードドメインは公開されています。
@ApiImplicitParam アノテーションを追加する場合は、それを試した後、dataTypeClass を有効に設定する必要があります。コードは以下のように表示されます:
@PostMapping(value = "/upload")
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
@ApiImplicitParam(name = "uploadFile", value = "上传的文件", dataType = "_File", dataTypeClass = MultipartFile.class, required = true)
public ApiResult<UploadInfoVo> upload(@RequestPart("uploadFile") MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}
スワッガーページは次のとおりです。
3つの失敗例
次の場合は、有効にならない場合があります。次の場合、Swagger デバッグ ページにはパラメータ情報がありません。
@PostMapping(value = "/upload", headers = "Content-Type=multipart/form-data")
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
public ApiResult<UploadInfoVo> upload(@RequestParam("uploadFile") MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}
@PostMapping(value = "/upload", headers = "Content-Type=multipart/form-data")
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
@ApiImplicitParam(name = "uploadFile", value = "上传的文件", dataType = "_File", required = true, paramType = "query")
public ApiResult<UploadInfoVo> upload(@RequestParam("uploadFile") MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}
@PostMapping(value = "/upload")
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
@ApiImplicitParam(name = "uploadFile", value = "上传的文件", dataType = "_File", required = true, paramType = "query")
public ApiResult<UploadInfoVo> upload(@RequestParam("uploadFile") MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}
以下の場合、アップロードファイルのリクエストパラメータは表示されますが、ファイルを選択するボタンは表示されません。
@PostMapping(value = "/upload", headers = "Content-Type=multipart/form-data", consumes = {
MediaType.MULTIPART_FORM_DATA_VALUE})
@ApiOperation(value = "文件上传接口", notes = "文件上传接口")
@SysLog(value = "文件上传", type = LogTypeEnum.UPLOAD)
@ApiImplicitParam(name = "uploadFile", value = "上传的文件", dataType = "File", required = true, paramType = "query")
public ApiResult<UploadInfoVo> upload(@RequestPart("uploadFile") MultipartFile uploadFile) throws Exception {
return ApiResult.ok();
}