#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.