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**注解的,放在 整个项目的入口位置,是非常恰当的。

发布了1318 篇原创文章 · 获赞 2522 · 访问量 340万+

猜你喜欢

转载自blog.csdn.net/FansUnion/article/details/103388988