1. 程式人生 > 實用技巧 >狂神的swagger筆記摘要

狂神的swagger筆記摘要

Swagger

  • 我們可以通過Swagger給一些比較難理解的屬性或介面增加註釋資訊
  • 介面文件實時更新
  • 可以線上測試

【注意點】在正式釋出的時候,關閉Swagger!!!出於安全考慮,能節省記憶體。

Swagger-ui 2.X

預設訪問的地址是:http://localhost:8080/swagger-ui.html

  1. pom.xml

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.9.2</version>
    </dependency>
    
    <!-- springfox-swagger2 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.9.2</version>
    </dependency>
    
  2. Swagger配置掃描介面 Docket.select()

    //配置了swagger的Docket的bean例項
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    /*
                        RequestHandlerSelectors, 配置要掃描介面的方式:
                        basePackage(): 指定要掃描的包  如basePackage("com.wxl.controller")
                        any(): 掃描全部
                        none(): 不掃描
                        withClassAnnotation(): 掃描類上的註解,引數是一個註解的反射物件  如:withClassAnnotation(RestController.class)
                        withMethodAnnotation(): 掃描方法上的註解,引數是一個註解的反射物件
                     */
                    .apis(RequestHandlerSelectors.basePackage("com.wxl.controller"))
                    //paths()  過濾什麼路徑
                    .paths(PathSelectors.ant("/kuang/**")) //ant是路徑的意思  apis先掃描helloController,存在再掃描路徑/kuang下面的所有路徑
                    .build();  //工廠模式  創造什麼東西
        }
    
  3. 配置是否啟動Swagger

    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(true) //預設為true  enable是否啟動Swagger,如果為false,則不能在瀏覽器中訪問
            //-------------------------   這裡到下面的.build()為Docket的一組內容
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.wxl.controller"))
            //.paths(PathSelectors.ant("/kuang/**")) 
            .build();  
        //-------------------------
    }
    
  4. 需求:我只希望我的Swagger在生產環境中使用,在釋出的時候不使用

    思路: 1. 判斷是不是生產環境

    ​ 2. 注入enable()

    環境:application.properties application-dev.properties

    @Bean
    public Docket docket(Environment environment){
        
        //設定要顯示的Swagger環境
        Profiles profiles = Profiles.of("dev");
        
        //通過environment.acceptsProfiles 判斷是否處在自己設定的環境中
        boolean flat = environment.acceptsProfiles(profiles);
        
        return new Docket(DocumentationType.SWAGGER_2)
            .apiInfo(apiInfo())
            .enable(flat) //預設為true  enable是否啟動Swagger,如果為false,則不能在瀏覽器中訪問
            .select()
            .apis(RequestHandlerSelectors.basePackage("com.wxl.controller"))
            //.paths(PathSelectors.ant("/kuang/**")) 
            .build();  
    }
    
  5. 配置API文件的分組

    .groupName("喂喂喂")
    
  6. 如何配置多個分組?(多個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");
    }
    
    //配置了swagger的Docket的bean例項
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("喂喂喂");  
    }
    
  7. SwaggerConfig.class

    package com.wxl.config;
    
    import java.util.ArrayList;
    
    @Configuration
    @EnableSwagger2    //開啟Swagger2
    public class SwaggerConfig {
    
        //配置了swagger的Docket的bean例項
        @Bean
        public Docket docket(){
            return new Docket(DocumentationType.SWAGGER_2)
                    .apiInfo(apiInfo())
                    .select()
                    /*
                        RequestHandlerSelectors, 配置要掃描介面的方式:
                        basePackage(): 指定要掃描的包  如basePackage("com.wxl.controller")
                        any(): 掃描全部
                        none(): 不掃描
                        withClassAnnotation(): 掃描類上的註解,引數是一個註解的反射物件  如:withClassAnnotation(RestController.class)
                        withMethodAnnotation(): 掃描方法上的註解,引數是一個註解的反射物件
                     */
                    .apis(RequestHandlerSelectors.basePackage("com.wxl.controller"))
                    //paths()  過濾什麼路徑
                    .paths(PathSelectors.ant("/kuang/**")) //ant是路徑的意思  apis先掃描helloController,存在再掃描路徑/kuang下面的所有路徑
                    .build();  //工廠模式  創造什麼東西
        }
    
        private ApiInfo apiInfo() {
            //作者資訊  聯絡方式
            Contact contact = new Contact("喂喂喂", "https://www.baidu.com/", "[email protected]");
            return new ApiInfo(
                    "Swagger Api 標題",
                    "Api 文件描述",
                    "1.0",
                    "https://www.baidu.com/",  //組的服務url地址
                    contact,
                    "Apache 2.0",
                    "http://www.apache.org/licenses/LICENSE-2.0",
                    new ArrayList()
            );
        }
    }
    
  8. 關於Swagger頁面中的Models:只要我們的介面中,返回值存在實體類,他就會被掃描到Swagger中。

Swagger-ui 3.0

預設訪問的地址是:http://localhost:8080/swagger-ui/index.html

  1. pom.xml

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