2016-01-05 5 views
3

Я работаю над RESTful API, используя swagger-api и swagger-editor для маршрутов. Я не могу понять, почему JSON я посылаю через тело, никогда не дойду до своего контроллера.Swagger POST Json Body Parameter Schema YAML

вот мой YAML

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 

Exemple запроса пост я посылаю.

curl -v -X POST -H "Content-Type: application/json" -d '{"name":"test"}' http://127.0.0.1:10010/projects 

и ответ

{"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"} 

Если я установить параметр «имя» не требуется, я только что получил пустой ответ, как этот

{ param1: 
    { path: [ 'paths', '/projects', 'post', 'parameters', '0' ], 
    schema: 
     { name: 'param1', 
     in: 'body', 
     description: 'description', 
     required: false, 
     schema: [Object] }, 
    originalValue: {}, 
    value: {} } } 

Я понятия не имею, почему так другой формат, такой как header, path или formdata, отлично работает. Я всегда получаю пустой объект. req.swagger.params как никакой ценности. Я пробовал несколько схем, но даже самый простой не укусил. Я могу сказать из заголовка, что 'content-type': 'application/json'. Итак, тип контента установлен, схема проверяет простой строковый аргумент с именем «имя». Все должно быть хорошо .. но все равно нет.

+0

Это может быть совершенно несвязанным, но для меня мне пришлось понизить пакет узла 'swagger-express-mw' обратно до' 0.1.0', чтобы временно решить эту проблему. – badsyntax

+0

Я понизил пакет, но по другим причинам и все тот же .. Я открыл вопрос о github. – camille

+0

вы можете разместить ссылку на вопрос github? – badsyntax

ответ

0

Эта проблема исправлена. Это не было связано с чванством. Я построил API с nodeJs, и я понял, что у меня не было промежуточного программного обеспечения для обработки параметра body. Так как я пропустил шаг до того, как включил промежуточное ПО для swagger, я ничего не мог сделать с параметром body.

Смежные вопросы