Swagger UI, кажется, не обрабатывает необязательные ключи с POST json body
Пакеты:
hapi-swagger: 9.0.1
joi: 13.0.2
Контекст:
Я использую swagger-ui
с swagger.json
файл, созданный hapi-swagger
,
Я использую для hapi-swagger
jsonEditor
опция установлена в true
, Это означает, что я не вписываю свое тело в одну текстовую область, а использую непосредственно сгенерированные входные данные пользовательского интерфейса.
Выпуск:
Только ключ "name"
требуется в полезной нагрузке, остальные необязательны по умолчанию, если я ссылаюсь на Joi
док.
На самом деле Swagger-UI
отправляет:
curl -X POST
--header 'Content-Type: application/json'
--header 'Accept: application/json'
-d '{
"name":"fzef",
"idsUser": [],
"idsUsergroup":[]
}'
Вместо этого я хочу, чтобы Swagger-UI
отправить запрос как:
curl -X POST
--header 'Content-Type: application/json'
--header 'Accept: application/json'
-d '{
"name":"fzef",
}'
Swagger UI
Джой Схема
Joi.object().keys({
request: Joi.object().keys({
name: Joi.string().required(),
idsUser: Joi.array().items(Joi.string()),
idsUsergroup: Joi.array().items(Joi.string()),
}),
}),
});
Swagger.json
...
"paths": {
"/addCompany": {
"post": {
"operationId": "postAddcompany",
"parameters": [{
"type": "string",
"default": "1",
"pattern": "/^v[0-9]+$/",
"name": "apiVersion",
"in": "path",
"required": true
},
{
"in": "body",
"name": "body",
"schema": {
"$ref": "#/definitions/Model 208"
}
}
],
"tags": ["api", "CompanyCommandsAPIPart"],
"responses": {
"default": {
"schema": {
"type": "string"
},
"description": "Successful"
},
}
}
}
}
"definitions": {
...
"Model 208": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"idsUser": {
"$ref": "#/definitions/Model 13",
"type": "array",
"x-alternatives": [{
"$ref": "#/x-alt-definitions/idsFunctionality",
"type": "array"
}, {
"type": "string"
}]
},
"idsUsergroup": {
"$ref": "#/definitions/Model 13",
"type": "array",
"x-alternatives": [{
"$ref": "#/x-alt-definitions/idsFunctionality",
"type": "array"
}, {
"type": "string"
}]
},
},
"required": ["name"]
},
...
}
Что я могу сделать, чтобы получить это тело запроса?
Мне нужно уточнить joi
метод для того, чтобы hapi-swagger
парсер добавить параметр вроде 'optional'
к swagger.json
?
Я нашел ту же проблему для запроса метода GET, но не нашел решения:
1 ответ
Компонент JSON Editor предоставляет кнопки "Свойства" и "Редактировать JSON" для настройки полезной нагрузки JSON, как вы можете в демонстрации компонента здесь: http://jeremydorn.com/json-editor/. Однако Swagger UI 2.x (версия, используемая hapi-swagger на момент написания), инициализирует JSON Editor с помощью disable_properties: true
а также disable_edit_json: true
поэтому эти кнопки скрыты, а пользовательский интерфейс не предоставляет никаких параметров конфигурации для изменения параметров редактора JSON. В репозитории hapi-editor на GitHub есть открытая проблема: https://github.com/glennjones/hapi-swagger/issues/332.
Возможный обходной путь - настроить код пользовательского интерфейса Swagger. Предполагая, что ваш Swagger UI index.html
использует unminified swagger-ui.js
найдите следующие строки в <hapi-swagger>/public/swaggerui/swagger-ui.js
:
disable_properties:true,
disable_edit_json:true,
и заменить их на:
disable_properties:false,
disable_edit_json:false,
Теперь редактор JSON будет иметь кнопку "Свойства объекта". Нажмите эту кнопку, чтобы выбрать свойства, которые будут отображаться в редакторе форм и включаться в тело запроса. Не выбранные свойства не будут отправлены в теле запроса.