Это почти то же самое, что и этот другой вопрос для 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\"}]}}")
Кроме этого, я не могу понять, как добиться того же, и Примеры чванства пока не слишком помог.
Итог, есть ли какой-нибудь элегантный способ добиться этого?




Я провел небольшое исследование по этой теме и тоже не пришел к удовлетворительному выводу.
В документации поля @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.
Так что я предполагаю, что ваш "взлом" - единственный выход ...
Есть новости по этой проблеме?