Аннотации Swagger 2 - содержательный пример схемы для карт

Это почти то же самое, что и этот другой вопрос для Swagger 1, за исключением того, что связано с Swagger 2.

Короче говоря, у меня есть реализация, которую я пытаюсь аннотировать, чтобы создать спецификацию OpenApi 3. Одна из моделей имеет свойство карты, и я хочу создать для нее хороший содержательный образец.

Например, при просмотре containerCreate Docker API в разделе HostConfig есть объект PortBindings, который имеет одну запись "22/tcp":

{
    "HostConfig": {
        "PortBindings": {
          "22/tcp": [    <== niceeee
            {
              "HostPort": "11022"
            }
          ]
        }
    }
}

К сожалению, документ, созданный из моих источников, в чем-то похож, но менее полезен. Хотя пример PortBinding верен и полезен, "additionalProp1" на самом деле ничего не значит:

{
    "HostConfig": {
        "PortBindings": {
          "additionalProp1": [    <== not so nice
            {
              "HostIp": "127.0.0.1",
              "HostPort": "8080"
            }
          ]
        }
    }
}

Реализация HostConfig

@Schema(description = "Container configuration that depends on the host we are running on")
public class HostConfig implements Serializable {
    @Schema(description = "A map of exposed container ports and the host port they should map to.")
    @Nullable
    @JsonProperty("PortBindings")
    private Map<String, List<PortBinding>> portBindings;
}

Реализация PortBinding

@Schema(description = "Host IP and port to which to bind a container port")
public class PortBindingDefinition implements Serializable {
    @Schema(description = "The host IP address", nullable = true, example = "127.0.0.1")
    @Nullable
    @JsonProperty("HostIp")
    private String hostIp;

    @Schema(description = "The host port number, as a string", example = "8080")
    @NotEmpty
    @JsonProperty("HostPort")
    private String hostPort;
}

Я могу вставить туда json в качестве примера, но это больше похоже на взлом, и он должен синхронизироваться со структурой фактических объектов, которые находятся на карте:

@Schema(description = "A map of exposed container ports and the host port they should map to.",
        example = "{\"PortBindings\": {\"22/tcp\": [{\"HostPort\": \"11022\"}]}}")

Кроме этого, я не могу понять, как добиться того же, и Примеры чванства пока не слишком помог.


Итог, есть ли какой-нибудь элегантный способ добиться этого?

Есть новости по этой проблеме?

krismath 23.09.2019 06:25
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
2 124
1

Ответы 1

Я провел небольшое исследование по этой теме и тоже не пришел к удовлетворительному выводу. В документации поля @Schema.pattern (здесь) указано:

When associated with a specific media type, the example string shall be parsed by the consumer to be treated as an object or an array.

Так что я предполагаю, что ваш "взлом" - единственный выход ...

Другие вопросы по теме