cancel
Showing results for 
Search instead for 
Did you mean: 

Error response with example content using annotations

SOLVED
Highlighted
Frequent Visitor

Error response with example content using annotations

Hi,

 

I am trying to document an api error response with  a example of the json body. I couldn't find an example or a fitting annotation. Playing around with the swagger editor I could at least get something that looks like the result I want to achieve.

 

      responses:
        200:
          description: "successful operation"
          schema:
            $ref: "#/definitions/Pet"
        400:
          description: "Invalid ID supplied"
          schema:
            $ref: "#/definitions/ApiResponse"
          examples: 
            properties:
              code: 42
              message: "Invalid ID supplied"

image.png

How can I do this with annotations?

I want to add that it is a very specific error message, so I don't need to reuse it.

1 ACCEPTED SOLUTION

Accepted Solutions
Staff

Re: Error response with example content using annotations

In swagger-core v1 / OpenAPI 2.0 used in your snippet (e.g. `io.swagger:swagger-jaxrs:1.5.22-SNAPSHOT`) this is not supported in versions < 1.5.22-SNAPSHOT (latest snapshot version available on sonatype); in latest version you can achieve it like:

 

 

@Api
@Path("/v1")
public class ResponseExampleResource {
  @Path("path")
  @ApiResponses({
    @ApiResponse(code = 200, message = "successful operation", response = Pet.class),
    @ApiResponse(code = 400, message = "Invalid ID supplied", response = ApiResponse.class,
		  examples = @Example(value =
        {
          @ExampleProperty(mediaType = "application/json", value = "{\"code\" : \"42\", \"message\" : \"Invalid ID supplied\"}")
        }
		  ))
  })
  @GET
  public Response responseExample() {
    return null;
  }
}

 

 

which resolves into:

 

 

paths:
  /v1/path:
    get:
      operationId: "getResource"
      parameters: []
      responses:
        200:
          description: "successful operation"
          schema:
            $ref: "#/definitions/Pet"
        400:
          description: "Invalid ID supplied"
          examples:
            application/json:
              code: "42"
              message: "Invalid ID supplied"
          schema:
            $ref: "#/definitions/ApiResponse"

 

 

Alternatively this is fully supported in swagger-core v2 / OpenAPI 3.0 (e.g. `io.swagger.core.v3:swagger-jaxrs2:2.0.6`), for example:

 

class GetOperationWithResponseExamples {
  @Operation(
    operationId = "responseExample",
    responses = {
      @ApiResponse(
        responseCode = "200",
        description = "successful operation",
        content = @Content(
          mediaType = "application/json",
          schema = @Schema(implementation = Pet.class)
        )
      ),
      @ApiResponse(
        responseCode = "400",
        description = "Invalid ID supplied",
        content = @Content(
          mediaType = "application/json",
          schema = @Schema(implementation = ApiResponse.class),
          examples = {
            @ExampleObject(
              name = "Error-42",
              value = "{\"code\": \"42\", \"message\" : \"Invalid ID supplied\"}"
						)
          }
        )
      )
    }
  )
  @GET
  @Path("/path")
  public void responseExample() {
  }
}

resolving to:

 

paths:
  /path:
    get:
      operationId: responseExample
      responses:
        200:
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
        400:
          description: Invalid ID supplied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
              examples:
                Error-42:
                  description: Error-42
                  value:
                    code: "42"
                    message: Invalid ID supplied

 

2 REPLIES 2
Staff

Re: Error response with example content using annotations

In swagger-core v1 / OpenAPI 2.0 used in your snippet (e.g. `io.swagger:swagger-jaxrs:1.5.22-SNAPSHOT`) this is not supported in versions < 1.5.22-SNAPSHOT (latest snapshot version available on sonatype); in latest version you can achieve it like:

 

 

@Api
@Path("/v1")
public class ResponseExampleResource {
  @Path("path")
  @ApiResponses({
    @ApiResponse(code = 200, message = "successful operation", response = Pet.class),
    @ApiResponse(code = 400, message = "Invalid ID supplied", response = ApiResponse.class,
		  examples = @Example(value =
        {
          @ExampleProperty(mediaType = "application/json", value = "{\"code\" : \"42\", \"message\" : \"Invalid ID supplied\"}")
        }
		  ))
  })
  @GET
  public Response responseExample() {
    return null;
  }
}

 

 

which resolves into:

 

 

paths:
  /v1/path:
    get:
      operationId: "getResource"
      parameters: []
      responses:
        200:
          description: "successful operation"
          schema:
            $ref: "#/definitions/Pet"
        400:
          description: "Invalid ID supplied"
          examples:
            application/json:
              code: "42"
              message: "Invalid ID supplied"
          schema:
            $ref: "#/definitions/ApiResponse"

 

 

Alternatively this is fully supported in swagger-core v2 / OpenAPI 3.0 (e.g. `io.swagger.core.v3:swagger-jaxrs2:2.0.6`), for example:

 

class GetOperationWithResponseExamples {
  @Operation(
    operationId = "responseExample",
    responses = {
      @ApiResponse(
        responseCode = "200",
        description = "successful operation",
        content = @Content(
          mediaType = "application/json",
          schema = @Schema(implementation = Pet.class)
        )
      ),
      @ApiResponse(
        responseCode = "400",
        description = "Invalid ID supplied",
        content = @Content(
          mediaType = "application/json",
          schema = @Schema(implementation = ApiResponse.class),
          examples = {
            @ExampleObject(
              name = "Error-42",
              value = "{\"code\": \"42\", \"message\" : \"Invalid ID supplied\"}"
						)
          }
        )
      )
    }
  )
  @GET
  @Path("/path")
  public void responseExample() {
  }
}

resolving to:

 

paths:
  /path:
    get:
      operationId: responseExample
      responses:
        200:
          description: successful operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Pet'
        400:
          description: Invalid ID supplied
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResponse'
              examples:
                Error-42:
                  description: Error-42
                  value:
                    code: "42"
                    message: Invalid ID supplied

 

Regular Visitor

Re: Error response with example content using annotations

 
New Here?
Join us and watch the welcome video:
SeptemberNews
Join our online event
SeptemberHubBub
Top Kudoed Authors
Join the September Hub-bub to show off, learn and win