Frido
Frido

Reputation: 402

How to use Swagger @ApiResponses annotation in Kotlin?

How to convert the following Swagger annotations from Java to 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 = "...") })

This does not works:

@ApiResponses(value = listOf( 
        ApiResponse(code = 200, message = "..."),
        ApiResponse(code = 404, message = "..."),
        ApiResponse(code = 500, message = "..."),
        ApiResponse(code = 400, message = "..."),
        ApiResponse(code = 412, message = "...") ))

The error is:

Type inference failed. Expected type mismatch: inferred type is List but ApiResponse was expected

It works when I use just one @ApiResponse instead of listOf(), but I have to define more @ApiResponse(s).

I use Swagger 2.5.0

Upvotes: 22

Views: 8166

Answers (2)

Sampada
Sampada

Reputation: 2991

For Swagger 3, this is the way to go:

 @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()])]
    )

This snippet also includes @Content, @ArraySchema and @Schema annotation examples.

Upvotes: 11

Robin
Robin

Reputation: 3892

As stated in the Kotlin Language Reference:

If the value argument [of an Annotation] in Java has an array type, it becomes a vararg parameter in Kotlin

So, to make your example work, you need to put it like so:

@ApiResponses(
    ApiResponse(code = 200, message = "..."),
    ApiResponse(code = 404, message = "..."),
    ApiResponse(code = 500, message = "..."),
    ApiResponse(code = 400, message = "..."),
    ApiResponse(code = 412, message = "...")
)

Upvotes: 20

Related Questions