2013-04-16 41 views
9

Có cách nào để xác định loại HashMap hoặc Generic Object trong phần mô hình không? Tôi có dịch vụ REST trả về sản phẩm và các sản phẩm đó có thể có các tùy chọn khác nhau. Thuộc tính tùy chọn về cơ bản là HashMap, trong đó id là tên tùy chọn và giá trị của nó là giá trị tùy chọn.Swagger HashMap loại thuộc tính

+0

Bạn đang sử dụng hương vị nào của Swagger? (jax-rs, play, etc) – Eyal

+0

@Eyal: Chúng tôi đang sử dụng swagger-ui và có cùng một vấn đề. Bạn có giải pháp hay giải pháp khác không? –

+0

@JanHartung Không, chúng tôi không có quá nhiều bản đồ trong api của chúng tôi ... bạn có thể muốn đăng ký [yêu cầu tính năng này trong hệ thống theo dõi vấn đề vênh vang.] (Https://github.com/wordnik/swagger- core/issues/244) – Eyal

Trả lời

6

Có thể.

Trong OpenAPI (. Fka Swagger) 2.0 và 3.0, một hashmap luôn là một bản đồ <string, something>:

  • Mấu chốt luôn là một chuỗi và không cần phải được xác định.
  • Loại giá trị là những gì bạn muốn và được xác định với additionalProperties.

Hãy nói rằng bạn muốn mô tả một hashmap <string, string> như thế này:

{ 
    "key1": "value1", 
    "key2": "value2" 
} 

Các tương ứng OpenAPI 2.0 định nghĩa sẽ là:

definitions: 
    StringStringMap: 
    type: object 
    additionalProperties: 
     type: string 

Trong OpenAPI 3.0 định nghĩa sẽ là:

components: 
    schemas: 
    StringStringMap: 
     type: object 
     additionalProperties: 
     type: string 


Một hashmap <string, object> như thế này

{ 
    "key1": {"someData": "data", "someOtherData": true}, 
    "key2": {"someData": "data2", "someOtherData": false} 
} 

sẽ được xác định theo cách này trong OpenAPI 2.0:

definitions: 
    ComplexObject: 
    type: object 
    properties: 
     someData: 
     type: string 
     someOtherData: 
     type: boolean 

    StringObjectMap: 
    type: object 
    additionalProperties: 
     $ref: "#/definitions/ComplexObject" 

và trong OpenAPI 3.0:

components: 
    schemas: 
    ComplexObject: 
     type: object 
     properties: 
     someData: 
      type: string 
     someOtherData: 
      type: boolean 

    StringObjectMap: 
     type: object 
     additionalProperties: 
     $ref: "#/definitions/ComplexObject" 

Tôi vừa mới được bảo hiểm này trong chiều sâu trong part 4 of my OpenAPI (fka Swagger tutorial).

OpenAPI (fka. Swagger) specification explains briefly this too.

+0

Điều này hữu ích và hoạt động nếu cấu trúc dữ liệu cho các giá trị là tất cả các loại ComplexObject. Tuy nhiên, tôi có một kịch bản mà cấu trúc của các giá trị khác nhau tùy thuộc vào mẫu của khóa. Trong JSON Schema, tôi có thể diễn tả điều này một cách dễ dàng bằng cách sử dụng patternProperties. Bất kỳ suy nghĩ về cách người ta có thể diễn tả điều này trong OAS/Swagger? –

+0

Tôi đang sử dụng chữ thập phân 2.0. Tôi muốn nhận được >. Làm thế nào chúng ta có thể nhận được kiểu phản ứng này? – Prabhath

Các vấn đề liên quan