【发布时间】:2019-10-09 00:00:39
【问题描述】:
Swagger 忽略 POST 请求正文中的必填字段。
重现步骤:
- 描述 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
- 生成api
swagger 生成服务器 -f swaggerfile.yaml -t api
- 描述单个处理程序:
api.UserCreateHandler = operations.UserCreateHandlerFunc(func(params operations.UserCreateParams) middleware.Responder {
return middleware.NotImplemented("MUST NOT BE PRINTED")
})
- 向生成的 api 发出请求:
curl -X POST -H "Content-Type: application/json" -d '{"foo":"bar"}' localhost:{{host}}/users
预期结果:
400 错误请求
给定结果:
501 不得打印
【问题讨论】:
-
如果是错误报告,您应该将其归档到 go-swagger 存储库中github.com/go-swagger/go-swagger/issues。
-
@Helen 目前还不清楚是错误还是错误
-
您的 API 定义是正确的,因此这很可能是一个错误(或缺少功能)。
-
顺便说一句,问题存在:github.com/go-swagger/go-swagger/issues/1904。也许有人会提出解决方法?
标签: go swagger go-swagger