Reputation: 402
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
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
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