如何在Kotlin中使用Swagger @ApiResponses注释?

Fri*_*ido 12 java annotations kotlin swagger

如何将以下Swagger注释从Java转换为Kotlin?

 @ApiResponses(value = { @ApiResponse(code = 200, message = "Given admin user found"),
            @ApiResponse(code = 404, message = "..."),
            @ApiResponse(code = 500, message = "..."),
            @ApiResponse(code = 400, message = "..."),
            @ApiResponse(code = 412, message = "...") })
Run Code Online (Sandbox Code Playgroud)

这不起作用:

@ApiResponses(value = listOf( 
        ApiResponse(code = 200, message = "..."),
        ApiResponse(code = 404, message = "..."),
        ApiResponse(code = 500, message = "..."),
        ApiResponse(code = 400, message = "..."),
        ApiResponse(code = 412, message = "...") ))
Run Code Online (Sandbox Code Playgroud)

错误是:

类型推断失败.预期类型不匹配:推断类型为List但预期ApiResponse

它只使用一个@ApiResponse而不是listOf(),但我必须定义更多@ApiResponse(s).

我使用Swagger 2.5.0

Rob*_*bin 15

Kotlin语言参考中所述:

如果Java中的[Annotation]的value参数具有数组类型,则它将成为Kotlin中的vararg参数

所以,为了使你的例子有效,你需要像这样:

@ApiResponses(
    ApiResponse(code = 200, message = "..."),
    ApiResponse(code = 404, message = "..."),
    ApiResponse(code = 500, message = "..."),
    ApiResponse(code = 400, message = "..."),
    ApiResponse(code = 412, message = "...")
)
Run Code Online (Sandbox Code Playgroud)

  • 对于 Swagger 3,使用“responseCode”代替“code” (2认同)

Sam*_*ada 11

对于 Swagger 3,这是要走的路:

 @ApiResponses(value = [
    ApiResponse(responseCode = "200", description = "...", content = [
        (Content(mediaType = "application/json", array = (
        ArraySchema(schema = Schema(implementation = DataModel::class)))))]),
    ApiResponse(responseCode = "400", description = "...", content = [Content()]),
    ApiResponse(responseCode = "404", description = "...", content = [Content()])]
    )
Run Code Online (Sandbox Code Playgroud)

此代码片段还包括@Content@ArraySchema@Schema注释示例。