英文:
swagger:parameters keep showing as query string param
问题
我有以下处理程序:
// 创建数据库
// swagger:route POST /databases createDatabase
//
// 创建数据库
//
// 安全性:
// oauth2:
//
// 响应:
// 202: Database
// 401: Error
// ...
func (h Handler) Create(c *gin.Context) {
var request CreateDatabaseRequest
if err := handler.DataBinder(c, &request); err != nil {
_ = c.Error(err)
return
}
...
}
我通过请求体发送以下结构体:
// CreateDatabaseRequest
// swagger:parameters createDatabase
// in: body
// required: true
//
// 创建数据库的输入参数
type CreateDatabaseRequest struct {
Name string `json:"name" binding:"required"`
GroupId uint `json:"groupId" binding:"required"`
}
但是当我生成文档时,CreateDatabaseRequest 结构体的属性显示为两个单独的查询参数。
我可以通过创建一个额外的虚拟结构体来解决这个问题,如下所示:
// swagger:parameters createDatabase
type _ struct {
// 创建数据库参数
// in: body
// required: true
Body database.CreateDatabaseRequest
}
但我不太喜欢这种方式,我更愿意直接在原地记录我的请求参数。
有什么办法可以正确地记录我的结构体,使其显示为请求体参数而不是查询字符串吗?
英文:
I have the following handler
// Create database
// swagger:route POST /databases createDatabase
//
// Create database
//
// Security:
// oauth2:
//
// responses:
// 202: Database
// 401: Error
// ...
func (h Handler) Create(c *gin.Context) {
var request CreateDatabaseRequest
if err := handler.DataBinder(c, &request); err != nil {
_ = c.Error(err)
return
}
...
}
And the following struct which I post via the request body
// CreateDatabaseRequest
// swagger:parameters createDatabase
// in: body
// required: true
//
// Create database input parameter
type CreateDatabaseRequest struct {
Name string `json:"name" binding:"required"`
GroupId uint `json:"groupId" binding:"required"`
}
But when I generate my docs the properties of CreateDatabaseRequeststruct shows up as two individual query parameter.
I can fix it by creating an additional dummy struct as defined below
// swagger:parameters createDatabase
type _ struct {
// Create database parameter
// in: body
// required: true
Body database.CreateDatabaseRequest
}
But I don't really like that and would rather just document my request parameter in place.
Any clue about how I can document my struct properly so it shows as a request body parameter rather then query string?
答案1
得分: 0
当你使用swagger:parameters
注解时,go-swagger将该结构视为API端点的所有参数的描述,包括头部、查询参数和请求体。因此,你需要一个结构来定义所有这些类型的参数,还需要另一个结构来定义实际的请求体结构。据我所知,没有办法摆脱包含请求体的第二个结构,因为请求体不是API的唯一参数。
英文:
When you use the swagger:parameters
annotation, go-swagger treats that structure as the description of all the parameters to an API endpoint, that includes headers, query params, and the body. So you need a structure that defines all these types of parameters, and another structure to define the actual body structure. Thus, as far as I know, there is no way to get rid of the second struct that includes the body, because a body is not the only parameter to an API.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论