首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swagger POST Json主体参数架构YAML

Swagger POST Json主体参数架构YAML
EN

Stack Overflow用户
提问于 2016-01-05 16:50:30
回答 2查看 9.2K关注 0票数 4

我正在使用路由的swagger-api和swagger-editor开发一个RESTful应用程序接口。我不明白为什么我通过body发送的JSON永远不会到达我的控制器。这是我的YAML

代码语言:javascript
复制
  schemes:
  - http
  - https

produces: [application/json, multipart/form-data, application/x-www-form-urlencoded]

paths:
 /projects:
    x-swagger-router-controller: project
    post:
      description: create a new project
      operationId: postProjects
      consumes:
        - application/json
      parameters:
        - name: param1
          in: body
          description: description
          required: false
          schema:
            $ref: "#/definitions/Project" 
      responses:
        "200":
          description: Success
          schema:
            $ref: "#/definitions/Project" 
        default:
          description: Error
          schema: 
            $ref: "#/definitions/ErrorResponse"

definitions:
  Project:
    properties:
      name:
       type: string
    required:
      - name

我发送的post请求的一个示例。

代码语言:javascript
复制
curl -v -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://127.0.0.1:10010/projects

以及他们的回应

代码语言:javascript
复制
{"message":"Request validation failed: Parameter (param1) failed schema validation","code":"SCHEMA_VALIDATION_FAILED","failedValidation":true,"results":{"errors":[{"code":"OBJECT_MISSING_REQUIRED_PROPERTY","message":"Missing required property: name","path":[]}],"warnings":[]},"path":["paths","/projects","post","parameters","0"],"paramName":"param1"}

如果我将参数"name“设置为不是必需的,我只是收到了如下的空响应{ param1:{ path:‘path’,'/projects','post','parameters','0‘,schema:{ name:'param1',in:'body',description:'description',required : false,schema: Object },originalValue:{},值:{} }}我不知道为什么,因为其他格式,如标题,路径或表单数据都可以正常工作。我总是收到一个空对象。req.swagger.params没有任何价值。我尝试了几种模式,但即使是最简单的模式也不起作用。我可以从头部看出'content-type':'application/json‘。因此设置了内容类型,模式将验证名为"name“的简单字符串参数。一切都会好起来的。但仍然不是。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-23 18:06:28

此问题已修复。这跟大摇大摆没关系。我用nodeJs构建了一个API,并且我意识到我没有处理主体参数的中间件。因此,因为我在启用swagger中间件之前遗漏了一个步骤,所以我无法对body参数做任何事情。

票数 0
EN

Stack Overflow用户

发布于 2021-12-19 09:48:29

在将json数据发送到API后端时,获取null值的主要原因是您提供的参数路径以及您为参数指定的命名。

您还必须显式声明所需的模式类型

您必须将参数名称设置为body,并设置in: body,以便它将主体对象选为JSON

这里有一个例子。你可以试一试

代码语言:javascript
复制
/auth/register:
    post:
      tags:
        - Auth
      parameters:
        - in: body
          name: user
          description: Create a new user.
          schema:
            type: object
            required:
              - firstName
              - lastName
              - email
              - password
              - confirmPassword
            properties:
              firstName:
                type: string
              lastName:
                type: string
              email:
                type: string
              password:
                type: string
              confirmPassword:
                type: string
            example:
              firstName: Jane
              lastName: Doe
              email: janedoe@gmail.com
              password: pass
              confirmPassword: pass
      responses:
        "200":
          description: OK
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34607526

复制
相关文章

相似问题

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