首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swagger UI似乎不处理带有后置json正文的可选键。

Swagger UI似乎不处理带有后置json正文的可选键。
EN

Stack Overflow用户
提问于 2018-01-03 11:25:05
回答 1查看 1.5K关注 0票数 3

套餐:

代码语言:javascript
运行
复制
hapi-swagger: 9.0.1
joi: 13.0.2

背景:

我将swagger-uihapi-swagger生成的swagger.json文件一起使用。

我使用设置为hapi-swaggerjsonEditor选项true。这意味着我没有在单个文本区域中输入主体,而是直接使用UI生成的输入。

发行:

在有效负载中只需要键"name",如果我引用Joi文档,其他的默认是可选的。

实际上,Swagger-UI发送:

代码语言:javascript
运行
复制
curl -X POST
--header 'Content-Type: application/json' 
--header 'Accept: application/json' 
-d '{
 "name":"fzef",

 "idsUser": [],

 "idsUsergroup":[]
}'

相反,我希望Swagger-UI发送如下的请求:

代码语言:javascript
运行
复制
curl -X POST 
--header 'Content-Type: application/json' 
--header 'Accept: application/json' 
-d '{
 "name":"fzef",
 }'

傲慢的用户界面

Joi模式

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
...
"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解析器向swagger.json中添加像'optional'这样的参数?

对于GET方法的查询,我发现了同样的问题,但没有找到解决方案:

https://github.com/swagger-api/swagger-editor/issues/684

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-03 14:18:07

JSON编辑组件提供了"Properties“和"Edit”按钮来自定义JSON有效负载,就像您在这里的组件演示中所做的那样:http://jeremydorn.com/json-editor/。但是,SwaggerUI2.x(编写本文时hapi使用的版本)用disable_properties: truedisable_edit_json: true初始化JSON,以便隐藏这些按钮,并且UI不公开任何配置选项来更改JSON选项。在GitHub上的hapi编辑器存储库中有一个悬而未决的问题:https://github.com/glennjones/hapi-swagger/issues/332

一个可能的解决办法是调整Swagger代码。假设您的Swagger的index.html使用的是无限制的swagger-ui.js,请在<hapi-swagger>/public/swaggerui/swagger-ui.js中找到以下行

代码语言:javascript
运行
复制
disable_properties:true,
disable_edit_json:true,

并将其替换为:

代码语言:javascript
运行
复制
disable_properties:false,
disable_edit_json:false,

现在,JSON编辑器将有“”按钮。单击此按钮可选择要在窗体编辑器中显示并包含在请求正文中的属性。未选择的属性将不会在请求正文中发送。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48076419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档