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();
}
swagger页面如下:
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();
}