SpringBoot下Swagger快速入门使用


文章目录

  • SpringBoot下Swagger快速入门使用
  • @[toc]
  • 1、swagger初识
  • 2、Swagger快速开始
  • 3、Swagger的使用配置
  • 4、swagger注释注解
1、swagger初识

  • 1、前导知识
  • 前后端开发阶段:
  • 大后端时代:前端设计静态页面,后端使用模板引擎实现动态展示;主要开发点在后端代码上。
  • 前后端分离:
    前端:前端不再需要后端代码即可运行部署;其开发分为:前端控制层、视图层。
    后端:后端控制层、服务层、数据访问层。
  • 前后端开发联调问题
  • 前端人员和后端人员无法实时协商,尽快解决(比如前端后续更新,添加了新功能展示,需要通知后端人员提供新的接口),开发难度变大。
  • 解决方案
  • 制定计划大纲,及时更新最新api。
  • 早期:使用word文档完成。
  • 中期:使用各种接口测试工具
  • 例如:前端使用postman测试,后端提供最新接口。
  • 使用swagger
  • 定义: 是一个api框架,RestFul api 文档在线生成工具。利用代码在线生成接口说明文档,且可以在线测试。
  • 好处
  • 后端:
  • 不用再手写WiKi接口拼大量的参数,避免手写错误
  • 对代码侵入性低,采用全注解的方式,开发简单
  • 方法参数名修改、增加、减少参数都可以直接生效,不用手动维护
  • 缺点:增加了开发成本,写接口还得再写一套参数配置
  • 前端:
  • 后端只需要定义好接口,会自动生成文档,接口功能、参数一目了然
  • 联调方便,如果出问题,直接测试接口,实时检查参数和返回值,就可以快速定位是前端还是后端的问题
  • 测试:
  • 对于某些没有前端界面UI的功能,可以用它来测试接口
  • 操作简单,不用了解具体代码就可以操作
  • 操作简单,不用了解具体代码就可以操作
  • 支持java、php等语言。

2、Swagger快速开始

  • 1、使用三步走
  • 1)导入依赖
<!-- ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>3.0.0</version>
</dependency>
<!-- swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>3.0.0</version>
</dependency>
  • 2)配置:默认配置。
@Configuration
@EnableSwagger2 //开启使用swagger2(swagger是老版的)
public class SwaggerConfiguration {//使用默认配置
}
  • 3)使用
    访问:http://localhost:8080/swagger-ui.html

3、Swagger的使用配置

  • 1、使用swagger的实例docket配置基础信息
@Configuration
@EnableSwagger2 //开启使用swagger2(swagger是老版的)
public class SwaggerConfiguration {//使用自定义配置
    
    //使用docket实例用于取代swagger原本的配置。
    @Bean
    public Docket docket () {
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
            	.groupName("grp1")//设置分组
            	.enable(true)
            	.select()
          	.apis(RequestHandlerSelectors.basePackage("com.zm.controller"))
            	.paths(PathSelectors.any())
            	.build();
    }
    
    private ApiInfo apiInfo() {
        
        Contact DEFAULT_CONTACT = new Contact("作者名:zm", "指定的某个url", "作者email");
        
        return new ApiInfo("标题:我的Swagger-Api文档", 
                           "本文档描述信息", "版本:1.0", 
                           "项目组织网址(一个url)", 
                           DEFAULT_CONTACT, 
                           "Apache 2.0", 
                           "http://www.apache.org/licenses/LICENSE-2.0", new ArrayList());
    }
}

Docket对象说明:

  • 1)构造方法:需要一个DocumentationType类对象,这里选择SWAGGER_2

docker swarm yaml版本_java


docker swarm yaml版本_spring boot_02

  • 2)apiInfo():用于配置swagger 信息。

这个类对象仅有如下属性,且只有一个构造方法。

docker swarm yaml版本_spring boot_03


docker swarm yaml版本_spring boot_04

官方提供了一个默认对象的构造方法,在该类的静态代码块中。

我们可以参照其创建一个apiInfo实例。

  • 3)apiInfo中的contact对象:用于配置作者信息。

同样的,再ApiInfo类中同样提供了Contac类对象的构造。

docker swarm yaml版本_docker swarm yaml版本_05

  • 2、使用swagger的实例docket配置扫描接口
    用法:使用docket对象的select()进行构造配置。
@Configuration
@EnableSwagger2 //开启使用swagger2(swagger是老版的)
public class SwaggerConfiguration {//使用自定义配置
    
    //使用docket实例用于取代swagger原本的配置。
    @Bean
    public Docket docket () {
        return new Docket(DocumentationType.SWAGGER_2)
                ......
            	.select()
          	.apis(RequestHandlerSelectors.basePackage("com.zm.controller"))
            	.paths(PathSelectors.any())
            	.build();
    }
    
    private ApiInfo apiInfo() {
     ......
    }
}
  • 1)select().xxx(链式构造).build():
    这里select方法执行使用了建造者模式,最后使用build方法返回Docket对象。

docker swarm yaml版本_spring_06

这里select()返回对象可进行两步构造

  • 1)apis():用于配置要扫描接口的方式,其接受参数是一个函数式接口:Predicate selector。
    这里使用RequestHandlerSelectors.basePackage配置为扫描包:

docker swarm yaml版本_开发语言_07

  • 2)paths():用于配置过滤路径,其接受参数是一个函数式接口:Predicate selector。
    这里使用PathSelectors.ant(“/book/**”),表示筛选com.zm.controller包下访问接口为/book/下的接口。

docker swarm yaml版本_java_08

  • 3、使用swagger的实例docket配置的启动与关闭
......
public class SwaggerConfiguration {//使用自定义配置
    @Bean
    public Docket docket () {
        return new Docket(DocumentationType.SWAGGER_2)
                ......
            	.enable(true)
            	.select()
          		......
            	.build();
    }
    
    private ApiInfo apiInfo() {
       ......
    }
}
  • 使用enable(boolean):默认为true代表配置有效,可修改为false。

docker swarm yaml版本_开发语言_09

docker swarm yaml版本_开发语言_10

实际作用:在生产和发布的不同环境下,希望swagger在生产环境中生效,发布环境中无效。

  • 1)判断当前使用环境
  • 2)读取配置
    这里提供两种方法:
//1、
@Bean
    public Docket createRestApi(Environment env) {
        //显示swagger环境
        Profiles profiles = Profiles.of("dev");
        //判断当前环境
        boolean flag = env.acceptsProfiles(profiles);

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
            	.enable(flag)
                .apis(RequestHandlerSelectors.basePackage("com.wz.controller"))
                .paths(PathSelectors.any())
                .build();
    }

//2、
@Value("${spring.profiles.active}")
private String activated;
 @Bean
    public Docket createRestApi(Environment env) {
        //判断当前环境
        boolean flag = activated.equals("dev") ? true : false;

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(flag)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.wz.controller"))
                .paths(PathSelectors.any())
                .build();
    }
  • 4、使用swagger的实例docket配置的分组
@Configuration
@EnableSwagger2 //开启使用swagger2(swagger是老版的)
public class SwaggerConfiguration {//使用自定义配置
    
    //使用docket实例用于取代swagger原本的配置。
    @Bean
    public Docket docket () {
        return new Docket(DocumentationType.SWAGGER_2)
                ......
            	.groupName("grp1")//设置分组
            	.select()
				......
            	.build();
    }
    
    private ApiInfo apiInfo() {
     ......
    }
}
  • groupName(“grp1”):用于设置分组,同一配置类下可以有多个docket,每个docket拥有一个组。

4、swagger注释注解

  • @ApiModel(“xxx”):给控制层返回的实体类对象添加注释
  • @ApiModelProperty(“xxx”):给字段添加注释
  • @Api(“xxx”):作用在控制层类上
  • @ApiOperation(“xxx”):作用于方法添加注释
  • @ApiParam(“xxx”):作用于控制层接口参数添加注释