Swagger的讲解与实践——内附完整代码

Swagger是一个用于前后端接口交互的工具,它能自动生成API文档并支持在线测试。在SpringBoot项目中,通过Springfox库可以方便地集成Swagger。文章详细介绍了如何配置Swagger,包括指定schema、配置接口扫描、控制是否启用以及实现API文档分组。同时,还展示了如何在生产环境中根据环境变量决定Swagger的启用状态。实体类和控制器的配置也进行了说明,使得接口注释更加清晰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Swagger的讲解与实践

Swagger

学习目标

  • 了解Swagger的作用和概念
  • 了解前后端分离
  • 在Springboot中集成Swagger
Swagger简介

swagger是进行前后端控制接口交互的工具
主流前后端框架:Vue(前端)+SpringBoot(后端)
后端时代:前端只用管理静态的页面。html=>后端。模板引擎JSP=>后端是主力
前后端分离时代:

  • 后端 :控制层controller、服务层service、数据访问层dao【后端团队】
  • 前端:前端控制层、视图层【前端团队】
    • 伪造后端数据,json。已经存在了,不需要后端,依旧能够跑起来
  • 前后端如何交互?=》API
  • 前后端相对独立,松耦合
  • 前后端甚至可以部署在不同的服务器上
    产生的一个问题
  • 前后端集成联调,前端人员和后端人员无法做到“即时协商,尽早解决”,最终导致问题的集中的爆发
    解决方案
  • 首先指定schema【计划的提纲】,实时更新API,降低集成的风险;
  • 早些年:指定的是word计划文档
  • 前后端分离:
    • 前端测试后端接口:postman
    • 后端提供接口,需要实时更新最新的消息及改动
Swagger优点:
  • ResultFul Api文档在线自动生成工具=>Api文档与API定义同步更新
  • 直接运行,可以在线测试API接口
  • 支持多种语言:(Java,Php…)
  • 世界上最流行的Api框架
    官网:https://swagger.io/
在项目中使用Swagger需要Springfox;
  • swagger2
  • ui

SpringBoot集成Swagger

  1. 新建一个Springboot项目=web项目
  2. 导入相关的依赖(这里版本用的是2.10.5)
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.10.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.10.5</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-spring-webmvc</artifactId>
    <version>2.10.5</version>
</dependency>
  1. 编写一个hello工程
  2. 配置Swagger信息==>config
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
}

注意:

  • 因swagger-ui Java使用的是 2.10.5 版本,此版本与 3.0 和 原有2.9 版本及以下的版本不同,如果你选择使用 webflux 进行开发此时的pom.xml 文件应该引入如下配置:
 <dependency>
		<groupId>io.springfox</groupId>
		<artifactId>springfox-spring-webflux</artifactId>
		<version>2.10.5</version>
	</dependency>

同时可以在 SwaggerConfig.java 文件加上 @EnableSwagger2WebFlux 此配置,不然使用原有的 @EnableSwagger2 或者使用成 @EnableSwagger2WebMvc 会出现图片出现的错误。

  • 如果你使用的是 springboot-web 进行开发,此时应该引入 pom.xml 如下配置:
<dependency>
		<groupId>io.springfox</groupId>
		<artifactId>springfox-spring-webmvc</artifactId>
		<version>2.10.5</version>
	</dependency>

同时可以在 SwaggerConfig.java 文件加上 @EnableSwagger2WebMvc 此配置,不然使用原有的 @EnableSwagger2 或者使用成 @EnableSwagger2WebFlux 会出现图片出现的错误。
5. 测试运行:http://localhost:8080/swagger-ui.html
在这里插入图片描述

配置Swagger信息
@Configuration
@EnableSwagger2WebMvc
public class SwaggerConfig {
    //配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo());
    }
    //配置Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("甜瓜", "https://blog.youkuaiyun.com/shooter7/article/details/121180333", "1123725698@qq.com");
        return new ApiInfo("Api Documentation",
                "Api Documentation",
                "1.0", "urn:tos",
                contact, "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }
}
Swagger配置扫描接口

Docket.select()

//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()
        //RequestHandlerSelectors,配置扫描接口的方式
        //basePackage:指定要扫描的包
        //any():扫描全部
        //none():都不扫描
        //withClassAnnotation()扫描类上的注解,参数是一个注解的反射对象
        //withMethodAnnotation()扫描方法上的注解
        .apis(RequestHandlerSelectors.basePackage("com.qi.swagger.controller"))
        //过滤什么路径
        .paths(PathSelectors.ant("/qi/**"))
        .build();
}
配置是否启动Swagger
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .enable(false)//enable是否启动了Swagger,如果是False,则Swagger不能在浏览器中访问
        .select()
        .apis(RequestHandlerSelectors.basePackage("com.qi.swagger.controller"))
        //.paths(PathSelectors.ant("/qi/**"))
        .build();
}

问题

  • 我只希望在我的Swagger在生产环境中使用,在发布的时候不使用?
    • 判断是不是生产环境,flag=false
    • 注入enable(flag)
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
    //设置要显示的Swagger环境
    Profiles profiles=Profiles.of("dev","test");
    //通过environment.acceptsProfiles判断是否在自己设定的环境当中
    boolean flag=environment.acceptsProfiles(profiles);

    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .enable(flag)//enable是否启动了Swagger,如果是False,则Swagger不能在浏览器中访问
        .select()
        .apis(RequestHandlerSelectors.basePackage("com.qi.swagger.controller"))
        //.paths(PathSelectors.ant("/qi/**"))
        .build();
}
配置API文档分组
.groupName("甜瓜")
  • 如何配置多个分组;多个Docket实例即可
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
实体类配置
//@Api(注释)
@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}
controller配置
@RestController
public class HelloController {
    @GetMapping(value = "/hello")
    public String hello(){
        return "hello";
    }
    @PostMapping(value = "/user")
    public User user(){
        return new User();
    }
    //Operation接口,不是放在类上面的,是方法
    @ApiOperation("hello控制类")
    @GetMapping(value = "/hello2")
    public String hello2(@ApiParam("用户名") String username){
        return "hello"+username;
    }
    @ApiOperation("Post控制类")
    @PostMapping(value = "/postt")
    public User postt(@ApiParam("用户名") User user){
        int i=5/0;
        return user;
    }
}

总结

  1. 我们可以通过Swagger给一些难理解的属性或者接口,增加注释的信息
  2. 接口文档实时更新
  3. 可以在线测试
    Swagger是一个优秀的工具,几乎所有的大公司都在使用他
    【注意点】在正式发布的时候关闭Swagger!!出于安全的考虑,而且节省运行的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西瓜程序设计

您的打赏将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值