Go Swagger使用map类型作为API响应时Schema为空的问题
解决Go Swagger中map类型响应Schema为空的问题
试试这几个方案,改动都很小,不用大改你现有的结构体定义:
方案1:用空结构体包裹map
不用动现有类型,新增一个专门用于Swagger响应的结构体,把DataExpressionLookup嵌进去,同时加上Swagger注释:
// swagger:response dataExpressionLookupResp type DataExpressionLookupResp struct { // in: body Body DataExpressionLookup `json:"expressions"` }
之后在你的API接口注释里指定用这个响应类型,Swagger就能识别到map内部的DataExpression结构了。
方案2:给自定义map类型加Swagger注释
如果DataExpressionLookup是你自定义的类型(type DataExpressionLookup map[string]DataExpression),直接在它的定义上加注释:
// swagger:model // 键为表达式ID,值为对应的表达式详情 type DataExpressionLookup map[string]DataExpression
这样Swagger生成工具就能解析这个类型的Schema,明确map的value是DataExpression。
方案3:在接口注释里显式指定Schema
如果不想新增类型或修改现有类型定义,直接在API handler的Swagger注释里写明响应的结构:
// @Summary 获取表达式列表 // @Produce json // @Success 200 {object} map[string]DataExpression "键为表达式ID,值为表达式详情" // @Router /expressions [get] func GetExpressions(c *gin.Context) { // 业务逻辑返回DataExpressionLookup实例 }
注意:不同Swagger工具的注释格式可能有差异,比如go-swagger用swagger:route风格,gin-swagger用@开头的注释,根据你用的工具调整就行。
关键前提
要确保DataExpression结构体本身已经正确添加了Swagger模型注释,不然即使map的Schema识别了,内部字段也不会显示:
// swagger:model type DataExpression struct { ID string `json:"id"` Expression string `json:"expression"` // 其他字段... }
内容的提问来源于stack exchange,提问作者Tom Barber
相关产品推荐
相关产品推荐

