首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger控制器接口上的文件上传

Swagger控制器接口上的文件上传
EN

Stack Overflow用户
提问于 2019-10-03 13:21:00
回答 2查看 436关注 0票数 0

我正在创建一个API微服务,它使用AWS提供文件存储。我把Swagger和Controller放在一起,我们需要允许用户在Swagger上上传一个文件。问题是我们的控制器被设置为一个接口,而不是一个类,而Google/所以的解决方案并不是为了能够与接口一起工作。为了澄清,我根本不需要操纵文件,只需接受它。我们的内部实现方法会将其发送到S3。

它使用了Java 11、AWS S3、Spring和Swagger 2。我尝试在方法createFile中使用@ApiParam@FormDataParam,但我得到了两个不同的错误:

  1. 方法必须是抽象的。
  2. 这里不允许进行注释。
代码语言:javascript
复制
@RequestMapping(value = {"v3/registration/documents", "v4/registration/documents"})
@RestController
@Api(
    value = "file-storage",
    description = "File storage service",
    tags = {"file-storage"})
public interface FileController {
  @PostMapping(
      value = "/{salesPlanAff}",
      produces = {MediaType.APPLICATION_JSON_VALUE},
      consumes = {MediaType.APPLICATION_JSON_VALUE})
  @ApiOperation(value = "Upload a file")
  @ApiResponses(
      value = {
        @ApiResponse(code = 200, message = "Success", response = FileResponseDTO.class),
        @ApiResponse(code = 201, message = "Created"),
        @ApiResponse(code = 400, message = "Bad Request"),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message = "Forbidden"),
        @ApiResponse(code = 404, message = "Not Found"),
        @ApiResponse(code = 500, message = "Internal Server Error")
      })
  void createFile(
      @PathVariable(required = true, name = "webSessionId") String webSessionId,
      @PathVariable(required = false, name = "salesPlanAff") String salesPlanAff);

我所期望的是在我的傲慢的页面上有一个按钮允许文件上传,没有预料到在添加文件上传时会有这么多困难。

EN

回答 2

Stack Overflow用户

发布于 2019-10-03 13:44:59

我有一个FileUpload在我的昂首阔步的页面,它的工作就像一个魅力。唯一的区别是我不是在界面上做的.

代码语言:javascript
复制
import org.springframework.web.multipart.MultipartFile;
     ...
@ApiOperation(value = "Analyse the identifiers in the file")
@RequestMapping(value = "/form", method = RequestMethod.POST, produces = "application/json")
@ResponseBody
public AnalysisResult getPostFile( @ApiParam(name = "file", value = "The file")
                                   @RequestPart MultipartFile file,
                                   HttpServletRequest r) {
    UserData ud = controller.getUserData(file);
    return controller.analyse(ud, r, file.getOriginalFilename());
    }

我稍微删掉了这段代码,但是您可以在我们的存储库中找到原始代码。

此外,此代码的工作版本还可以执行测试这里

谢谢

票数 0
EN

Stack Overflow用户

发布于 2019-10-03 15:28:02

我想出了如何将注解输入,其中一部分来源于打字。对于任何感兴趣的人,以下是解决办法:

代码语言:javascript
复制
public interface FileController {
  @PostMapping(
      value = "/{salesPlanAff}",
      produces = {MediaType.APPLICATION_JSON_VALUE},
      consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
  @ApiOperation(value = "Upload a file")
  @ApiResponses(
      value = {
        @ApiResponse(code = 200, message = "Success", response = FileResponseDTO.class),
        @ApiResponse(code = 201, message = "Created"),
        @ApiResponse(code = 400, message = "Bad Request"),
        @ApiResponse(code = 401, message = "Unauthorized"),
        @ApiResponse(code = 403, message = "Forbidden"),
        @ApiResponse(code = 404, message = "Not Found"),
        @ApiResponse(code = 500, message = "Internal Server Error")
      })
  void createFile(
      @PathVariable(required = true, name = "webSessionId") String webSessionId,
      @PathVariable(required = false, name = "salesPlanAff") String salesPlanAff,
      @ApiParam(required = true, value = "Document to be uploaded")
      @RequestPart MultipartFile multipartFile,
      @ApiParam(required = true, value = "File Type")
      @QueryParam("documentType") String documentType);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58220067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档