Artur Mello
Artur Mello

Reputation: 317

SWAGGER 2 Inheritance for Request and Response Objects from same Base Object

In my Spring API designed with Swagger 2.0, I'm trying to create Inheritance using swagger. I want to create a base object, which will have common properties for both Request and Response objects. I tried to do it like the example below:

CategoryResponse:
  allOf:
    - $ref: '#/definitions/Category'
    - type: object
      properties:
        id:
          type: integer
          example: '1'          
CategoryRequest:
  type: object
  allOf:
    - $ref: '#/definitions/Category'         
Category:
  discriminator: nameCategory
  type: object
  properties:
    nameCategory:
      type: string
      example: Games

The problem is that I get a Bad Request error when trying to POST or PUT a new CategoryRequest object. It doesn't even gets to the API Controller, so I guess the problem might in the model definition above. I tried many variations, but none of them worked. However, when I try to GET the list of categories, or one category by id, i'm able to do so (My CategoryResponse is working and extending Category fine).

Does anybody knows the correct way of creating this structure using inheritance of a common base model, both for Request and Response objects?

Thanks in advance!

Upvotes: 0

Views: 1429

Answers (1)

Helen
Helen

Reputation: 97540

id looks like an auto-generated and read-only property. In that case you don't need inheritance - you can use a single Category schema and mark id as readOnly: true.

Category:
  type: object
  properties:
    nameCategory:
      type: string
      example: Games
    id:
      type: integer
      readOnly: true  # <-----
      example: 1

From the OpenAPI Specification:

readOnly

Declares the property as "read only". This means that it MAY be sent as part of a response but MUST NOT be sent as part of the request.

Upvotes: 1

Related Questions