我正在尝试对Swagger文档中的 POST 请求进行测试,但是遇到以下麻烦:
在Swagger编辑器上,我可以正常进行测试,但是在Swagger UI上,“请求正文”字段不会出现,因此我无法输入电子邮件和密码来测试请求。
在这里您可以看到“请求正文”字段,其中包含可供编辑的数据示例:
Swagger Editor Example
在这里您可以看到Swagger UI没有显示它:
Swagger UI Example
注意:我已经生成了一个 nodejs服务器。
我的.yaml
代码:
openapi: '3.0.1'
info:
version: 1.0.0
title: Test
description: Test openapi.
servers:
- url: http://localhost:3005
paths:
/login:
post:
summary: Login
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/login'
responses:
200:
description: Test
components:
schemas:
login:
type: object
properties:
email:
type: string
example: example@example.com.br
password:
type: string
format: password
example: example123
expires:
type: integer
example: 86400
required:
- email
- password
答案 0 :(得分:0)
TL; DR:将Swagger UI更新到最新版本。
只是为了阐明情况(以供将来的读者使用):OP将这个OpenAPI 3.0定义粘贴到Swagger Editor中,生成了一个Node.js服务器并运行它。请求正文显示问题与Swagger UI有关,该UI是此Node.js服务器(http://localhost:8080/docs
)的一部分。
问题在于此Node.js服务器使用的是Swagger UI的非常旧的版本。更具体地说,它使用
oas3-tools
软件包1.0.1版,其中捆绑了Swagger UI 3.3.1版。 Swagger UI的最新版本(截至撰写本文时)为3.22.1,并且没有所描述的问题。
解决方案是将Swagger UI更新到最新版本:
您可以open an issue和oas3-tools
一起使用,并要求开发人员将捆绑的Swagger UI更新到最新版本。另外,您也可以为此提交PR。
作为快速修复,您可以派生oas3-tools
,更新<oas3-tools>\middleware\swagger-ui
文件夹中捆绑的Swagger UI文件,然后更新生成的Node.js的package.json
服务器来引用您的oas3-tools
分支。
答案 1 :(得分:0)
尽管'request body'字段确实以建议的@Helen更新显示在UI中,但是发布的body对象似乎仍然无法显示在控制器中,这可能是因为捆绑了swagger-tools中间件也很老我必须对 node_modules / oas3-tools / middleware / swagger-metada.js 进行一些更改,以使requestBody出现在控制器的req.swagger.params中。我希望这可以在正式的oas3-tools代码正在开发中(如果有的话)帮助完成一个项目。
第162行,位于var parsers = _.reduce(parameters ... }, [])
块之后:
if (swaggerMetadata.operation.requestBody && parsers.indexOf(bodyParser) === -1) parsers.push(bodyParser);
_.each(parameters, ... });
块之后的第225行:
if (req.body) swaggerMetadata.params.body = {value: req.body};