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

让API开口说话,Swagger如何把枯燥代码变成“活文档”

大家好,我是小悟。

有没有遇到过这样的尴尬场景?

前端小妹跑来问你:“哥哥,这个用户列表接口怎么调用呀?”
你自信满满:“看文档啊!”
然后她发来一张截图——你去年写的Word文档,上面写着:

GET /api/users (大概是这个吧,我也忘了) 可能需要token,不确定 参数...自己猜吧

这时候你就需要Swagger——它就像是给你的API开了个24小时真人直播秀,让前端、测试、甚至产品经理都能直接看到每个接口的“素颜”状态!

什么是Swagger?

想象一下,你的API是个害羞的宅男,从来不出门见人。Swagger就是那个逼他:

  1. 穿上西装(自动生成文档)
  2. 站在聚光灯下(可视化界面)
  3. 还自带使用说明书(在线测试)

最妙的是,这哥们还会自动更新!代码一改,文档立刻变,再也不用担心“文档版本落后于代码”这种史诗级bug了。

开始整活!SpringBoot集成Swagger详细步骤

第1步:添加依赖——给项目“注射美容针”

<!-- pom.xml 里加入这些“营养品” --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency> <!-- 如果你用的是Swagger3(推荐) --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>

或者用Gradle的小伙伴:

// 在build.gradle里“加点料” implementation 'io.springfox:springfox-boot-starter:3.0.0'

第2步:创建配置类——给Swagger“办个身份证”

package com.example.demo.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; @Configuration public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .apiInfo(apiInfo()) .select() // 扫描的包路径,就像告诉Swagger:“去这个包厢找人” .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller")) // 扫描所有路径,相当于“这个KTV所有房间都看看” .paths(PathSelectors.any()) .build() .enable(true) // 想关闭Swagger时改成false,就像“今天不营业” .groupName("默认分组"); // 可以分多个组,就像给API分班级 } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API文档标题") .description(""" 这里是详细的描述,可以写很长很长... 比如: 1. 这个系统是干什么的 2. 接口有什么特殊要求 3. 常见的错误码说明 支持Markdown语法哦! """) .contact(new Contact( "你的名字", "https://github.com/yourname", "your.email@example.com" )) .version("v1.0.0") .license("MIT License") .licenseUrl("https://opensource.org/licenses/MIT") .termsOfServiceUrl("http://localhost:8080") .build(); } }

第3步:Controller添加注解——给API“化妆打扮”

package com.example.demo.controller; import io.swagger.annotations.*; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/users") @Api(tags = "用户管理模块", value = "用户相关的所有操作") public class UserController { @GetMapping("/{id}") @ApiOperation(value = "根据ID查询用户", notes = "注意:id必须是正整数") @ApiImplicitParams({ @ApiImplicitParam( name = "id", value = "用户ID", required = true, dataType = "Long", paramType = "path", example = "123" ) }) @ApiResponses({ @ApiResponse(code = 200, message = "成功"), @ApiResponse(code = 404, message = "用户不存在"), @ApiResponse(code = 500, message = "服务器开小差了") }) public User getUser(@PathVariable Long id) { // 你的业务逻辑 return userService.findById(id); } @PostMapping("/") @ApiOperation(value = "创建用户", notes = "创建一个新用户") public User createUser( @ApiParam(value = "用户对象", required = true) @RequestBody UserDTO userDTO) { return userService.create(userDTO); } // 实体类也要加注解,这样Swagger才知道字段的含义 @ApiModel(description = "用户实体") public static class User { @ApiModelProperty(value = "用户ID", example = "1") private Long id; @ApiModelProperty(value = "用户名", example = "张三", required = true) private String username; @ApiModelProperty(value = "邮箱", example = "zhangsan@example.com") private String email; // getters and setters } }

第4步:配置文件调整——解决“404尴尬症”

# application.yml spring: mvc: pathmatch: matching-strategy: ant_path_matcher # 解决SpringBoot2.6+的兼容问题 # 如果想自定义Swagger路径 springfox: documentation: swagger-ui: path: /swagger-ui.html # 默认就是这个 enabled: true

第5步:启动并访问——见证奇迹的时刻!

  1. 启动SpringBoot应用
  2. 打开浏览器访问:http://localhost:8080/swagger-ui/
  3. 或者访问:http://localhost:8080/swagger-ui/index.html

你会看到一个漂亮的界面,左边是API列表,右边是详细说明,还可以直接点击“Try it out”测试接口!

高级玩法——给Swagger“加特效”

1. 分组显示(适合微服务)

@Bean public Docket userApi() { return new Docket(DocumentationType.OAS_30) .groupName("用户模块") .select() .apis(RequestHandlerSelectors.basePackage("com.example.user")) .build(); } @Bean public Docket orderApi() { return new Docket(DocumentationType.OAS_30) .groupName("订单模块") .select() .apis(RequestHandlerSelectors.basePackage("com.example.order")) .build(); }

2. 添加全局token

@Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .securitySchemes(Collections.singletonList( new ApiKey("Authorization", "Authorization", "header") )) // ...其他配置 }

3. 自定义响应消息

@Bean public Docket createRestApi() { return new Docket(DocumentationType.OAS_30) .globalResponses(HttpMethod.GET, Arrays.asList( new ResponseBuilder() .code("500") .description("服务器内部错误") .build(), new ResponseBuilder() .code("403") .description("没有权限") .build() )) // ...其他配置 }

常见问题及解决方案

问题1:访问/swagger-ui/报404

解决方案: 1. 检查依赖是否正确 2. 添加@EnableOpenApi注解(Swagger3) 3. 检查SpringBoot版本兼容性

问题2:界面出来了,但没显示API

解决方案: 1. 检查@RestController是否在扫描包内 2. 检查@RequestMapping等注解是否正确 3. 检查Docket配置的路径选择器

问题3:生产环境想关闭Swagger

# application-prod.yml springfox: documentation: enabled: false

或者用Profile控制:

@Profile({"dev", "test"}) // 只在开发测试环境生效 @Configuration public class SwaggerConfig { // 配置内容 }

总结:Swagger到底香不香?

优点(为什么你要用):

  1. 自动生成文档:代码即文档,改了代码文档自动更新,告别“文档滞后”
  2. 在线测试:前端不用等你了,自己就能测试接口
  3. 协作神器:前后端对接再也不用“传纸条”
  4. 支持多种格式:可以导出JSON、YAML等格式
  5. 社区活跃:遇到问题容易找到解决方案

缺点(你要注意的):

  1. 代码侵入性:注解会让Controller看起来有点“胖”
  2. 性能影响:生产环境建议关闭
  3. 学习成本:各种注解需要时间熟悉

最后:

  • 小项目用Swagger,就像给自行车装导航——方便!
  • 大项目用Swagger,就像给航母装GPS——必须!
  • 不用Swagger,就像开车不看路标——容易撞墙!

好的API文档不是写出来的,是“生成”出来的。Swagger就是你的API的专属化妆师+摄影师+经纪人,让你的接口从“代码宅男”变身“流量明星”!

现在给你的SpringBoot项目装上Swagger吧,让前端妹子对你刮目相看!

谢谢你看我的文章,既然看到这里了,如果觉得不错,随手点个赞、转发、在看三连吧,感谢感谢。那我们,下次再见。

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

http://www.jsqmd.com/news/170266/

相关文章:

  • UniversalPauseButton终极指南:解锁Windows系统万能暂停神器
  • 最新Linux Nmap命令典型用法全揭秘:网络扫描与安全利器,(非常详细)零基础入门到精通,收藏这篇就够了
  • 低代码开发革命:JeeLowCode如何让编程变简单?
  • hal_uart_transmit与RS485总线集成的项目应用详解
  • 索立德吉Sonidegib治疗局部晚期基底细胞癌的真实世界疗效与肌酸激酶升高管理
  • 终极指南:掌握DKVideoPlayer双引擎播放器开发全流程
  • DKVideoPlayer双引擎播放器深度解析:打造极致视频播放体验
  • X-ray射线检测设备哪家好?2025无损检测设备厂家实力榜 - 栗子测评
  • 终极APK安全分析工具:快速提取网络端点的完整指南
  • AI图像放大终极指南:从模糊到清晰的完整解决方案
  • Conda update更新TensorFlow到v2.9版本注意事项
  • 2025能源管理系统品牌,能源管理系统品牌公司盘点 - 栗子测评
  • Keil5安装教程51单片机:全面讲解驱动与兼容性
  • Vue生态拓展与实战案例09,Vue 项目测试入门:单元测试(Jest)与端到端测试(Cypress)
  • transformer模型详解之注意力机制在TensorFlow中的实现
  • Jupyter魔法命令%timeit测试TensorFlow函数性能
  • Git clean清理未跟踪文件保持TensorFlow项目整洁
  • 2025年终北京床垫卖场推荐:主流卖场横向测评与5家高性价比榜单盘点。 - 品牌推荐
  • tRPC-Go:重新定义微服务架构的工程效率边界
  • 依达拉奉Edaravone口服悬溶液延缓肌萎缩侧索硬化症功能衰退的循证依据与服用指导
  • HTML video标签嵌入TensorFlow视频生成演示
  • java+vue+SpringBoot健身房管理系统(程序+数据库+报告+部署教程+答辩指导)
  • MNE-Python神经数据分析终极指南:从入门到实战应用
  • GitHub Star增长秘籍:开源一个TensorFlow-v2.9模板项目
  • 如何在本地高效运行TensorFlow-v2.9镜像?附GPU算力购买链接
  • 用JavaScript增强HTML版AI博客交互体验
  • 2026骨外科(012)(副)主任医师考试题库怎么选?三招教你选出高效题库 - 医考机构品牌测评专家
  • 干货--告别公网IP焦虑!3款顶级开源内网穿透工具推荐与实战(frp/nps/Lanproxy)
  • Bytebase完整指南:数据库DevOps平台API集成与第三方系统对接
  • GitHub Readme Stats 完全指南:让你的GitHub个人主页瞬间升级