2017-07-06 74 views
0

我使用JAX-RS(RestEasy)以及Swagger。我的一個端點可以上傳文件。上傳文件的定義方式(在RestEasy中)是提供一個org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput作爲參數。Swagger UI不支持正確上傳文件的RestEasy

這裏是我的終點:

@PUT 
@Path("/apis/{id}/file") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@ApiOperation(value = "Registers a file.", code = 201, nickname = "registerFile") 
@ApiResponses(
    value = { 
     @ApiResponse(code = 201, message = "File created.", 
        response = FileCreated.class), 
     @ApiResponse(code = 400, message = "Invalid parameters."), 
     @ApiResponse(code = 404, message = "API is not found.")}) 
Response registerFile(
    @ApiParam(value = "API ID.", required = true) @PathParam("id") String apiId, 
    @ApiParam(value = "File to register.", required = true, type = "file", name = "apiFile") 
     MultipartFormDataInput apiFile) throws AppException; 

問題是什麼?

不幸的是,swagger-ui根據MultipartFormDataInput的內部屬性生成模式,而不是上傳文件的按鈕。 我嘗試使用@FormParam註釋(指示提供參數應解釋爲文件)以及MultipartFormDataInput參數,但該應用程序不想編譯。

問題:是否有任何解決方案/解決方法來提供上傳swagger-ui中的文件的按鈕?

回答

1

將溶液從apiFile論點除去@ApiParam和添加@ApiImplicitParam(其不結合於JAX-RS,並允許手動定義參數)上述方法:

@ApiImplicitParams({@ApiImplicitParam (value = "File to register.", required = true, dataType = "file", name = "apiFile", paramType="formData")}) 
+0

如果我們去掉'@ ApiParam',有兩個字段:'apiId','body'用'MultipartFormDataInput'和按鈕的內部性能上載在招搖的UI文件。這個「身體」是一個副作用。我會發布答案,包括如何解決這一副作用的最終解決方案。 – Robert

0

最終溶液

的最終的解決方案包括一個選定的答案,但不是刪除@ApiParam,我們應該添加@ApiParam(hidden = true)。爲什麼?

如果我們去掉@ApiParam,有兩個字段:apiIdbodyMultipartFormDataInput的內在屬性和上傳的招搖的UI文件的按鈕。這個body字段是一個副作用。爲了解決這個問題,我們應該提供@ApiParam(hidden = true),然後有apiId的字段以及在swagger-ui中上傳文件的按鈕。

順便說一句:我在1.5.12版本下面測試了swagger-ui的代碼。

@PUT 
@Path("/apis/{id}/file") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Produces(MediaType.APPLICATION_JSON) 
@ApiOperation(value = "Registers a file.", code = 201, nickname = "registerFile") 
@ApiResponses(
    value = { 
     @ApiResponse(code = 201, message = "File created.", 
        response = FileCreated.class), 
     @ApiResponse(code = 400, message = "Invalid parameters."), 
     @ApiResponse(code = 404, message = "API is not found.")}) 
@ApiImplicitParams(
    @ApiImplicitParam(value = "File to register.", required = true, dataType = "file", 
         name = "apiFile", paramType = "formData")) 
Response registerFile(
    @ApiParam(value = "API ID.", required = true) @PathParam("id") String apiId, 
    @ApiParam(hidden = true) MultipartFormDataInput apiFile) throws AppException;