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页面没有任何参数信息:
image.png
image.png

2 解决方式

可以使用@RequestPart注解,如下:

    @PostMapping(value = "/upload")
    @ApiOperation(value = "文件上传接口", notes = "文件上传接口")
    public ApiResult<UploadInfoVo> upload(@RequestPart("uploadFile") MultipartFile uploadFile) throws Exception {
        return ApiResult.ok();
    }

swagger中页面如下,调试页面的上传域已经出来了:
image.png
image.png

如果想要添加@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页面如下:
image.png
image.png

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();
    }

image.png

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐