SWAGGER 2对同一基础对象的请求和响应对象的继承

时间:2018-11-30 17:16:31

标签: java spring spring-boot inheritance swagger-2.0

在我使用Swagger 2.0设计的Spring API中,我试图使用swagger创建继承。我想创建一个基础对象,该对象将具有Request和Response对象的通用属性。我尝试像下面的示例那样做:

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

问题是,当尝试发布或放置新的CategoryRequest对象时,我收到一个Bad Request错误。它甚至没有涉及到API控制器,所以我想问题可能出在上面的模型定义中。我尝试了许多变体,但没有一个起作用。但是,当我尝试通过ID获取类别列表或一个类别时,我可以做到这一点(我的CategoryResponse正在工作,并且可以很好地扩展“类别”)。

有人知道使用对请求和响应对象通用的基本模型的继承来创建此结构的正确方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

id看起来像是一个自动生成的只读属性。在这种情况下,您不需要继承-您可以使用单个Category模式,并将id标记为readOnly: true

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

来自OpenAPI Specification

  

readOnly

     

将属性声明为“只读”。这意味着它可以作为响应的一部分发送,但绝不能作为请求的一部分发送。