2013-04-16 3 views
9

Есть ли способ определить тип HashMap или Generic Object в разделе моделей? У меня есть служба REST, которая возвращает продукты, и эти продукты могут иметь разные варианты. Свойство options - это, в основном, HashMap, где id - это имя параметра, а его значение - значение параметра.Swagger HashMap тип собственности

+0

Какой вкус Swagger вы используете? (jax-rs, play и т. д.) – Eyal

+0

@Eyal: Мы используем swagger-ui и имеем ту же проблему. У вас есть решение или обход? –

+0

@JanHartung Нет, у нас нет слишком большого количества карт в нашем api ... вы можете подписаться на [этот запрос функции в системе отслеживания ошибок swagger.] (Https://github.com/wordnik/swagger- core/issues/244) – Eyal

ответ

6

Да, это возможно.

В OpenAPI (. FKA Кураж) 2,0 и 3,0, HashMap лучше всегда <string, something> карта:

  • Ключ всегда является строкой и не должны быть определены.
  • Тип значения - это то, что вы хотите, и определяется с помощью additionalProperties.

Допустим, вы хотите, чтобы описать <string, string> HashMap, как этот:

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

Соответствующее определение OpenAPI 2,0 будет:

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

В OpenAPI 3.0 определение будет:

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


<string, object> HashMap как этот

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

будет определяться таким образом, в OpenAPI 2.0:

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

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

и в OpenAPI 3.0:

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

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

Я просто покрыты это в глубине в part 4 of my OpenAPI (fka Swagger tutorial).

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

+0

Это полезно и работает, если структура данных для значений - это весь тип ComplexObject. Однако у меня есть сценарий, в котором структура значений изменяется в зависимости от шаблона ключа. В JSON Schema я мог бы легко выразить это с помощью patternProperties. Любые мысли о том, как это можно выразить в OAS/Swagger? –

+0

Я использую swagger 2.0. Я хочу получить >. Как мы можем получить этот тип ответа? – Prabhath

Смежные вопросы