Swagger

发布时间 2023-12-17 23:53:23作者: zL66

Swagger快速入门

学习目标:

  • 了解Swagger的作用和概念
  • 了解前后端分离
  • 在SpringBoot中集成Swaggers

适用于前后端分离项目vue+springboot

Swagger介绍

  • swagger号称世界上最流行的Api框架
  • RestFul Api文档在线自动生成工具=>Api文档与Api定义同步更新
  • 直接运行,可以在线测试API接口
  • 支持多种语言(java,php)

在项目中是用swagger,

  • swagger2

  • ui

在SpringBoot集成Swagger

导入依赖

 <!--swagger2-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!--swagge-ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

检查是否成功集成可以访问swagger-ui.html

配置swagger信息

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;

@Configuration
@EnableSwagger2 //开启swagger2
public class swaggerconfigruation {

    @Bean
    public Docket docket(){
        return new Docket( DocumentationType.SWAGGER_2)
                .apiInfo(apiinfo());
    }
    //配置swagger apiinfo信息
    private ApiInfo apiinfo(){
        Contact DEFAULT_CONTACT = new Contact("zl", "", "2011068612@qq.com");
     return   new ApiInfo(
             "zl的swagger学习",
             "轻舟已过万重山",
             "1.0",
             "urn:tos",
             DEFAULT_CONTACT,
             "Apache 2.0",
             "http://www.apache.org/licenses/LICENSE-2.0",
             new ArrayList());
    }
}

Swagger配置扫描接口

适用Swagger3.0版本,上面使用的是swagger2.0

swagger访问ui的地址是http://localhost:8080/swagger-ui/

注意 swagger3.0版本与2.0版本在导入依赖上的区别

3.0只需要导入swagger启动器

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

image-20230714153249676

    @Bean
    public Docket docket(){

        return new Docket( DocumentationType.OAS_30)
                .apiInfo(apiinfo())
                .enable(true)
            //实现分组
                .groupName("zl")
                .select()
                //basePackage 扫描指定的包
                //any()扫描所有
                //none()什么都不扫描
                //withClassAnnotation() 扫描拥有指定注解类对象
                //withMethodAnnotation() 扫描拥有指定注解方法的对象
                .apis(RequestHandlerSelectors.basePackage("com.zl.controller"))
                //paths过滤什么路径[代表只要/zl路径下面的接口]
                .paths(PathSelectors.ant("/zl/**"))
                .build();
    }

思考一个问题,当我们需要协同开发时如何实现多个分组

答:其实一个分组是由一个Docket bean实列实现的,所以要实现多个分组就是实现多个docket bean实列

动态调整swagger的运行状态

 @Bean
    public Docket docket(Environment environment){
          //实现判断当前运行的环境是什么环境
        //获取当前生产环境,上线项目不使用swagger
        //boolean env = environment.getActiveProfiles()[0].equals("dev");
        Profiles profiles = Profiles.of("dev", "test");//当生产环境是dev或者test的时候
        boolean flag = environment.acceptsProfiles(profiles);

        return new Docket( DocumentationType.OAS_30)
                .apiInfo(apiinfo())
                .enable(flag)
                .groupName("zl")
                .select()
                //basePackage 扫描指定的包
                //any()扫描所有
                //none()什么都不扫描
                //withClassAnnotation() 扫描拥有指定注解类对象
                //withMethodAnnotation() 扫描拥有指定注解方法的对象
                .apis(RequestHandlerSelectors.basePackage("com.zl.controller"))
                //paths过滤什么路径[代表只要/zl路径下面的接口]
//                .paths(PathSelectors.ant("/zl/**"))
                .build();
    }

knife4j学习

王富贵 (lmlx66.top)

knife4j (xiaominfo.com) 访问di http://localhost:17790/doc.html