go-swagger не проверяет тело в запросе POST

Swagger игнорирует обязательные поля в теле запроса POST.

Действия по воспроизведению:

  1. Опишите swaggerfile
swagger: "2.0"
info:
  title: Sample API
  description: API description in Markdown.
  version: 1.0.0
host: api.example.com
schemes:
  - http
paths:
  /users:
    post:
      operationId: UserCreate
      parameters:
        - name: body
          in: body
          required: true
          schema:
            allOf:
              - $ref: "#/definitions/ID"
              - $ref: "#/definitions/User_object"
              - type: object
                required:  # HERE! IT IS NOT WORKING
                  - ID
                  - genderCode
                  - birthDate
                  - code
      produces:
        - application/json
      consumes:
        - application/json
      responses:
        200:
          description: "OK"

definitions:
  ID:
    title: ID
    properties:
      GUID:
        type: string
        description: "ID"
        format: uuid

  User_object:
    title: User_object
    properties:
      genderCode:
        type: string
      birthDate:
        type: string
        format: date
      code:
        type: string
  1. Создать api

swagger сгенерировать сервер -f swaggerfile.yaml -t api

  1. Опишите единый обработчик:
api.UserCreateHandler = operations.UserCreateHandlerFunc(func(params operations.UserCreateParams) middleware.Responder {
        return middleware.NotImplemented("MUST NOT BE PRINTED")
    })
  1. Сделайте запрос к сгенерированному api:

curl -X POST -H "Content-Type: application / json" -d '{"foo": "bar"}' localhost: {{host}} / users

Ожидаемый результат:

ошибка 400, неверный запрос

Данный результат:

501 НЕ ДОПУСКАЕТСЯ ПЕЧАТЬ


person VadimFilin    schedule 22.05.2019    source источник
comment
Если это отчет об ошибке, вы должны отправить его в репозиторий go-swagger по адресу github.com. / go-swagger / go-swagger / issues.   -  person Helen    schedule 22.05.2019
comment
@Helen пока неясно, ошибка это или ошибка   -  person VadimFilin    schedule 22.05.2019
comment
Ваше определение API верное, поэтому, скорее всего, это ошибка (или отсутствие функциональности).   -  person Helen    schedule 22.05.2019
comment
Кстати, проблема существует: github.com/go-swagger/go-swagger/ выпусков / 1904. Может кто подскажет обходной путь?   -  person VadimFilin    schedule 22.05.2019


Ответы (1)


Мой личный обходной путь:

api.UserCreateHandler = operations.UserCreateHandlerFunc(func(params operations.UserCreateParams) middleware.Responder {
        if params.Body.UserObject == (models.UserObject{}) {
            return //... your BAD REQUEST type
        }
        return middleware.NotImplemented("MUST NOT BE PRINTED")
    })

person VadimFilin    schedule 22.05.2019