Fel
Fel

Reputation: 4828

How to annotate array of objects response in Swagger

I have to debug a REST API Java project that has been developed using Swagger.I'm new to it, so I'm a little bit confused on how to do certain things. For example, here's one method:

@GET
@Path("/location/name")
@Produces({MediaType.APPLICATION_JSON})
@Operation(
    summary = "Get location information",
    tags = {"Information"},
    responses = {
        @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = LocationResponse.class)), description = "Get location information"),
        @ApiResponse(responseCode = "500", description = "Error: Internal Server Error")
    }
)
public Response searchLocationByName(
    @Parameter(description = "Location name", required = true) @DefaultValue("Barcelona") @QueryParam("name") String locationName
) { /* METHOD CODE */ }

The @ApiResponse for the code 200 is not of type LocationResponse but of type ArrayList<LocationResponse>, as it can return more than one location. What would be the correct syntax for this change? I've been reading the documentation at https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Annotations#operation-annotations but I couldn't find an appropriate example...

Thanks!

Upvotes: 39

Views: 48080

Answers (3)

Rohit Rathour
Rohit Rathour

Reputation: 131

For the PageDto<T> we can simply create ResponseDto which extends PageDto<T> and use it in swagger as :

@ApiResponse(
  responseCode = "200",
  content = @Content(
  array = 
    @ArraySchema(
      schema = @Schema(implementation = ResponseDto.class))), 
      description = "Get location information"),

Upvotes: 13

Jay Yadav
Jay Yadav

Reputation: 440

Code should look like this !!

@ApiResponses(
    value = {
      @ApiResponse(
          responseCode = "200",
          description = "Successful operation",
          content = @Content(
              mediaType = "application/json",
              array = @ArraySchema(
              schema = @Schema(implementation = LocationResponse.class))))
})

Upvotes: 6

y_ug
y_ug

Reputation: 1124

Use @ArraySchema instead of plain @Schema to define input or output data for array types.

Upvotes: 59

Related Questions