当前位置: 首页 > news >正文

swagger 注释说明

一、接口注释核心字段

在 Go 的路由处理函数(Handler)上方添加注释,支持以下常用注解:

注解名称用途说明示例格式
@Summary接口简要描述@Summary 创建用户
@Description接口详细说明@Description 通过用户名和邮箱创建新用户
@Tags接口分组标签(用于在 Swagger UI 中分类)@Tags users
@Accept接口接受的请求格式(如 json, xml, form-data@Accept json
@Produce接口返回的响应格式(如 json, xml@Produce json
@Param定义请求参数(路径参数、查询参数、请求体等)@Param id path int true "用户ID"
@Success成功响应的状态码、数据结构及描述@Success 200 {object} User
@Failure失败响应的状态码、数据结构及描述@Failure 404 {object} ErrorResponse
@Router定义接口路由路径和 HTTP 方法@Router /users/{id} [get]
@Security接口使用的安全策略(需先在全局定义 @securityDefinitions@Security ApiKeyAuth

二、@Param 参数详解

语法格式
@Param 参数名 参数位置 数据类型 是否必填 "描述"
参数位置
  • path:URL 路径参数(如 /users/{id}
  • query:URL 查询参数(如 /users?name=John
  • header:HTTP 头参数
  • body:请求体(通常用于 POST/PUT)
  • formData:表单数据(如文件上传)
数据类型
  • 基本类型:int, string, boolean
  • 模型对象:{object} User(需在代码中定义 User 结构体)
示例
// 路径参数
// @Param id path int true "用户ID"

// 查询参数
// @Param name query string false "用户名"

// 请求体(JSON)
// @Param user body User true "用户信息"

// 表单文件上传
// @Param file formData file true "上传文件"

三、完整接口注释示例

示例 1:GET 请求(带路径参数)
// GetUser 获取用户详情
// @Summary 通过用户ID获取详情
// @Description 根据ID查询用户信息
// @Tags users
// @Accept json
// @Produce json
// @Param id path int true "用户ID"
// @Success 200 {object} User
// @Failure 404 {object} ErrorResponse
// @Router /users/{id} [get]
func GetUser(c *gin.Context) { ... }
示例 2:POST 请求(带请求体)
// CreateUser 创建用户
// @Summary 创建新用户
// @Description 通过JSON数据创建用户
// @Tags users
// @Accept json
// @Produce json
// @Param user body User true "用户信息"
// @Success 201 {object} User
// @Failure 400 {object} ErrorResponse
// @Router /users [post]
func CreateUser(c *gin.Context) { ... }
示例 3:文件上传(表单)
// UploadFile 上传文件
// @Summary 上传文件
// @Description 通过表单上传文件
// @Tags files
// @Accept multipart/form-data
// @Produce json
// @Param file formData file true "上传文件"
// @Success 200 {object} SuccessResponse
// @Router /upload [post]
func UploadFile(c *gin.Context) { ... }

四、模型定义注释

在结构体(请求/响应模型)上添加注释,Swagger 会自动解析字段:

// User 用户信息模型
type User struct {
    // 用户ID(示例值:1)
    ID   int    `json:"id" example:"1"`
    // 用户名(示例值:John)
    Name string `json:"name" example:"John"`
    // 邮箱(示例值:john@example.com)
    Email string `json:"email" example:"john@example.com"`
}

// ErrorResponse 错误响应模型
type ErrorResponse struct {
    // 错误码(示例值:404)
    Code    int    `json:"code" example:"404"`
    // 错误信息(示例值:"用户不存在")
    Message string `json:"message" example:"用户不存在"`
}

五、常见问题

1. 文档未生成或未更新
  • 解决:确保运行 swag init -g main.go 并重新编译代码。
  • 检查:注释必须紧贴在路由处理函数上方,不能有空行。
2. 模型字段未显示
  • 解决:确保结构体字段有 json 标签,例如 json:"id"
  • 示例值:使用 example:"1" 标签为字段添加示例值。
3. 参数绑定失败
  • 检查@Param 注解中的参数位置(如 path/query)与实际代码是否一致。
  • 示例:代码中使用 c.Param("id") 时,Swagger 注解应为 @Param id path ...

六、最佳实践

  1. 统一标签命名:如 @Tags users 用于所有用户相关接口。
  2. 详细描述参数:在 @Param 中明确参数是否必填(true/false)。
  3. 分离模型定义:将请求/响应模型放在独立的 models 包中,提升可维护性。
  4. 版本控制:在全局注解中指定 @BasePath /api/v1,便于区分 API 版本。

相关文章:

  • LeetCode 34 在排序数组中查找元素的第一个和最后一个位置
  • 【5G学习】5G中常说的上下文之上下文响应
  • 在线地图支持天地图和腾讯地图,仪表板和数据大屏支持发布功能,DataEase开源BI工具v2.10.7 LTS版本发布
  • java中的Future的设计模式 手写一个简易的Future
  • C语言 ——— 认识C语言
  • 应对海量数据归档难题?AWS Glacier 的低成本冷存储解决方案实践指南
  • Keras使用1
  • 【AI学习从零至壹】语⾔模型及词向量相关知识
  • linux多线(进)程编程——(6)共享内存
  • 链表代码实现(C++)
  • C语言--常见的编程示例
  • 医药采购系统平台第5天01:药品目录导入功能的实现Oracle触发器的定义供货商药品目录模块的分析供货商目录表和供货商控制表的分析、数据模型设计和优化
  • Rasa 模拟实现超简易医生助手(适合初学练手)
  • Tkinter表格与列表框应用
  • 制作像素风《饥荒》类游戏的整体蓝图和流程
  • ubuntu 2404 安装 vcs 2018
  • Doris 安装部署、实际应用及优化实践:对比 ClickHouse 的深度解析
  • 从零搭建高可用Kafka集群与EFAK监控平台:全流程实战总结
  • Foxmail邮件客户端跨站脚本攻击漏洞(CNVD-2025-06036)技术分析
  • Go:基本数据
  • 中国证券监督管理委员会党委委员、副主席王建军接受审查调查
  • “面具女孩”多次恐吓电梯内两幼童,当事女孩及家长道歉后获谅解
  • 百年传承,再启新程,参天中国迎来2.0时代
  • 违规行为屡禁不止、责任边界模糊不清,法治日报:洞穴探险,谁为安全事故买单?
  • 金科股份:去年营收约275亿元,今年确保所有项目“零烂尾”
  • 昆明破获一起算命破灾诈骗案,民警:大师算不到自己的未来