Petziferum
Petziferum

Reputation: 229

What is the Swagger 2 Annotation for the responseContainer?

I working on a Migration from Springfox to Springdoc with Swagger version 2.1.9.

Therefore the Annotations must be rewritten and I cant find the equivalent Annotations for the old Swagger Annotations.

I have this API Controller:

@GetMapping
@ApiOperation(value = "Load Building")
@ApiResponses(value = {
   @ApiResponse(code = 200, message = "OK", response = Building.class, responseContainer = "Page")
})
public ResponseEntity<Page<Building>> getBuilding(Pageable building) {
   final Page<Building> building = buildingrepo.findAll(page).map(bw -> mapper.map(bd, Building.class));

return ResponseEntity.ok().body(building);

With the new Swagger Annotation it must be re-written, but I don`t know how i put the "Building.class" into the Pageable in the Response Schema. I cant use "responseContainer" anymore

@GetMapping
@Operation(summary = "Load Building")
@ApiResponses(value = {
   @ApiResponse(responseCode = "200", 
                description = "OK",
                content = @Content(schema = @Schema(implementation = Building.class))) // <--- Here i need the Page class somehow as Container!!!
})
public ResponseEntity<Page<Building>> getBuilding(Pageable building) {
   final Page<Building> building = buildingrepo.findAll(page).map(bw -> mapper.map(bd, Building.class));

return ResponseEntity.ok().body(building);

The Output Response in the Api Docs schould look like this:

responses:
  200:
    schema: 
      $ref: "#/definitions/Page<Building>"

And also in the Swagger UI as Example:

{
  "content": [
    { Building: "" }
   ]
}

I cant find the right Parameter for the "responseContainer"

Upvotes: 4

Views: 3251

Answers (1)

Glen Mazza
Glen Mazza

Reputation: 788

Swagger 2's equivalent to a responseContainer is to wrap the Schema in an ArraySchema. For an endpoint returning List<Foo> :

@ApiResponses(@ApiResponse(responseCode = "200", description = "List of Foos",
        content = @Content(array = @ArraySchema(uniqueItems = false,
                schema = @Schema(implementation = com.mycompany.Foo.class))
)))

Note uniqueItems is false by default so can be omitted above. However, explicitly set this value to true if you're returning a Set instead of a List.

References: https://docs.swagger.io/swagger-core/v2.1.1/apidocs/io/swagger/v3/oas/annotations/media/ArraySchema.html

Upvotes: 8

Related Questions