Является ли OpenAPI v.3 неполным или конвертер неправильный?

#java #json #swagger #openapi

#java #json #развязность #openapi

Вопрос:

Я пытаюсь проверить некоторые данные для REST API, используя описание swagger. Я преобразовал swagger.json в OpenAPI 3.0.1, используя опцию преобразования редактора swagger, и теперь пытаюсь прочитать его в объект OpenAPI с помощью ObjectMapper со следующими строками кода:

                 File schemaFile = new File(path);
                if (schemaFile.exists() amp;amp; schemaFile.canRead()) {
                    this.api = MAPPER.readValue(schemaFile, OpenAPI.class);
                }
  

Во-первых, я получил сообщение об ошибке, поскольку он не смог распознать поле x-codegen-request-body-name, сгенерированное конвертером. Хорошо, это не важно для моих целей, поэтому я удалил это поле.
Но затем я получил следующую ошибку:

Нераспознанное поле «элементы» (класс io.swagger.v3.oas.models.media.Схема), не помеченный как игнорируемый (34 известных свойства: «по умолчанию», «multipleeof», «minimum», «exclusiveMinimum», «not», «расширения», «xml», «заголовок», «дискриминатор», «обязательный», «максимальный», «обнуляемый»,»exclusiveMaximum», «exampleSetFlag», «minProperties», «externalDocs», «maxLength», «WriteOnly», «uniqueItems», «свойства», «maxProperties», «тип», «maxItems», «перечисление», «minItems», «шаблон», «Минимальная длина»,»Только для чтения», «пример», «$ ref», «устаревший», «формат», «Дополнительные свойства», «описание»])n в [Источник: (BufferedInputStream); строка: 186, столбец: 23] (через цепочку ссылок: io.swagger.v3.oas.модели.OpenAPI[«компоненты»] -> io.swagger.v3.oas.models.Компоненты [«схемы»] -> java.util.LinkedHashMap[«searchchattrlist»] -> io.swagger.v3.oas.models.media.Schema[«properties»]->java.util.LinkedHashMap[«merchantCategoryCode»]->io.swagger.v3.oas.models.media.Схема [«элементы»])

В запросе к сервису содержится более десятка атрибутов, и два из них являются массивами JSON. в файле openapi.json, который я получил от конвертера, они отображаются как

       "merchantCategoryCode": {
        "type": "array",
        "description": "Merchant Category Codes of the Merchant",
        "items": {
          "type": "string"
        }
      },
  

Итак, в спецификации OpenAPI отсутствует определение массивов, или конвертер делает это неправильно, и мне нужно заменить токен items чем-то другим? Если да, то какой?

Ответ №1:

Я нашел решение. Первоначально я создавал ObjectMapper для анализа файла OpenAPI JSON с помощью конструктора по умолчанию:

 private static final ObjectMapper MAPPER = new ObjectMapper();
  

Вот где я получал эту ошибку.
Я заменил эту строку на

 private static final ObjectMapper MAPPER = Json.mapper();
  

и все ошибки исчезли. По-видимому, средство отображения объектов, созданное io.swagger.v3.core.util.Json каким-то образом настроен для обработки всех конструкций OpenAPI.