Swagger註解-@EnableSwagger2應該放在哪裏呢?

最近遇到一個奇怪的問題,而且可以復現。

 

項目環境:SpringBoot,Spring標準配置

 

原先的Maven配置,不區分 dev/pre/prod環境配置,

通過application.yml中的 profile指定 dev pre  prod,不同環境打包,改一下這個配置。

 

這個時候,Swagger註解的配置:

@Configuration

@EnableSwagger2

@Profile({"dev""pre"})

class SwaggerConfig {

    /**

     * swagger2的配置文件,這裏可以配置swagger2的一些基本的內容,比如掃描的包等等

     */

    @Bean

    public Docket createRestApi() {

        return new Docket(DocumentationType.SWAGGER_2)

                .apiInfo(apiInfo())

                .select()

                .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))

                //爲當前包路徑

                //.apis(RequestHandlerSelectors.basePackage("com.br.demo.controller"))

                .paths(PathSelectors.any())

                .build();

    }

 

    /**

     * 構建 api文檔的詳細信息函數

     */

    private ApiInfo apiInfo() {

        return new ApiInfoBuilder()

                //頁面標題

                .title("Swagger2構建RESTful API文檔,Demo項目")

                //創建人

                .contact(new Contact("雷哥""http://22""wen.lei"))

                //版本號

                .version("1.0")

                //描述

                .description("API 描述")

                .build();

    }

}

 

 

然後項目結構進行了改造:用的新的,Maven打包後的代碼,完全和之前一樣。

 

但是,Swagger能訪問到 swagger-ui.html,

 

UI升級版本的doc.html

<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.8.8</version>
</dependency>

 

主要內容出不來,提示 /swagger-resources/那個目錄 404.

 

百思不得其解。

之前某同事也遇到過這個問題,折騰半天,

最終發現

@EnableSwagger2
public class SpringBootApplication {

 

}

這個註解需要放在 Application的上面。

之前是放在 Swagger單獨某個Config類的上面。

 

這個有點奇怪了,暫時沒看出根本原因。

 

之前放在Config上面,一個可能原因是 ,參考網上例子,當時放在上面沒問題,實際上 之前這麼用也確實沒有問題,只是換了種模式 出問題了。

另外一個原因,Swagger相關的代碼和註解 配置,集中在一個Config文件裏,而不是分散在多個地方。

 

今天遇到這個問題,讓我想起來

@EnableSwagger2 放在SpringBootApplication 上面,也是非常合理的。


@EnableDiscoveryClient
@EnableFeignClients(basePackages="com.br.contract")
@EnableScheduling
@EnableSwagger2

@Configuration

@SpringBootApplication(scanBasePackages={"com.","com.leige"})
@ServletComponentScan

public class SpringBootApplication {

 

}

 

這樣一對比,就發現非常合理。

凡是,開始某個模塊或某個用法@Enable**註解的,放在 整個項目的入口位置,是非常恰當的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章