首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger响应验证失败

Swagger响应验证失败
EN

Stack Overflow用户
提问于 2017-02-11 15:22:41
回答 4查看 6.5K关注 0票数 2

我正在用Swagger和NodeJS构建API,到目前为止我遇到的恼人的问题是Swagger验证了响应,而且并不总是很顺利。

我的案子:

在文件.yaml中:我使用Swagger检查了yaml语法,=>文件是正确的。

代码语言:javascript
复制
/user/createNew:
x-swagger-router-controller: xxxxxxx
post:
  tags:
  - User
  summary: Create New User
  # used as the method name of the controller
  operationId: createNewUser
  parameters:
    - name: NewUserReq
      in: body
      required: true
      description: Email register
      schema:
        $ref: "#/definitions/NewUserReq"

  responses:
    "201":
      description: Successful
      schema:
        # a pointer to a definition
        $ref: "#/definitions/CreateUserResp"
    # responses may fall through to errors
    default:
      description: Error
      schema:
        $ref: "#/definitions/ErrorResponse"


CreateUserResp:
properties:
  status:
    type: integer
    description: Response status
  response:
    $ref: "#/definitions/MsgResponse"
MsgResponse:
  required:
    - resp_msg
  properties:
    resp_msg:
     type: string

为了检查响应格式,我从Swagger生成了NodeJs文件

代码语言:javascript
复制
 examples['application/json'] = {
    "response" : {
        "resp_msg" : "aeiou"
     },
    "status" : 123
 };

在控制器文件.js中:

代码语言:javascript
复制
function createNewUser(req,res){
....

var resp = new Object();
resp.resp_msg=data.email;
final_response.status = 200;
final_response.response = resp;

console.log("createNewUser::Query succeffully", JSON.stringify(final_response)); 
//{"status":200,"response":{"resp_msg":"test@gmail.com"}}

res.set('Content-Type', 'application/json');
res.json(final_response);
}

尝试使用Postman运行API,下面的日志会出现错误:

代码语言:javascript
复制
Error: Response validation failed: failed schema validation
at throwErrorWithCode (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/lib/validators.js:121:13)
at Object.module.exports.validateAgainstSchema (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/lib/validators.js:176:7)
at /var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/middleware/swagger-validator.js:141:22
at /var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:356:13
at async.forEachOf.async.eachOf (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:233:13)
at _asyncMap (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:355:9)
at Object.map (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/node_modules/async/lib/async.js:337:20)
at validateValue (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/middleware/swagger-validator.js:134:11)
at ServerResponse.res.end (/var/app/current/node_modules/swagger-express-mw/node_modules/swagger-node-runner/node_modules/swagger-tools/middleware/swagger-validator.js:252:9)
at ServerResponse.send (/var/app/current/node_modules/express/lib/response.js:205:10)

我不知道是什么导致了错误,我再次检查了JSON响应的结构。

非常感谢你的任何建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-02-13 20:15:00

在尝试了一些实验之后,我成功了。我的解决方案仅仅是将yaml文件中的响应代码"201“更改为"200”,它起了作用。我不知道为什么我留下了响应代码"201“。不管怎么说,我还是新来的,我不知道这是否是一个最佳实践。我愿意接受任何更好的建议。

票数 0
EN

Stack Overflow用户

发布于 2018-12-10 14:55:08

您已经将设置为required: true,这意味着您必须通过该参数,否则将出现响应验证失败的

票数 1
EN

Stack Overflow用户

发布于 2017-02-11 17:56:32

我试着复制,但它给了我一些错误。但是,我尝试删除MsgResponse并将CreateUserResp定义为单个定义,它起了作用:

代码语言:javascript
复制
CreateUserResp:
  type: object
  properties:
    response:
      type: object
      properties:
        resp_msg:
          type: string
          description: The response object
    status:
      type: number
      description: The status code

似乎您并没有将response定义为一个对象,而只是向其添加一些属性。

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

https://stackoverflow.com/questions/42177537

复制
相关文章

相似问题

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