套餐:
hapi-swagger: 9.0.1
joi: 13.0.2背景:
我将swagger-ui与hapi-swagger生成的swagger.json文件一起使用。
我使用设置为hapi-swagger的jsonEditor选项true。这意味着我没有在单个文本区域中输入主体,而是直接使用UI生成的输入。
发行:
在有效负载中只需要键"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",
 }'傲慢的用户界面

Joi模式
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解析器向swagger.json中添加像'optional'这样的参数?
对于GET方法的查询,我发现了同样的问题,但没有找到解决方案:
发布于 2018-01-03 14:18:07
JSON编辑组件提供了"Properties“和"Edit”按钮来自定义JSON有效负载,就像您在这里的组件演示中所做的那样:http://jeremydorn.com/json-editor/。但是,SwaggerUI2.x(编写本文时hapi使用的版本)用disable_properties: true和disable_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中找到以下行
disable_properties:true,
disable_edit_json:true,并将其替换为:
disable_properties:false,
disable_edit_json:false,现在,JSON编辑器将有“”按钮。单击此按钮可选择要在窗体编辑器中显示并包含在请求正文中的属性。未选择的属性将不会在请求正文中发送。

https://stackoverflow.com/questions/48076419
复制相似问题