介绍
可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调。
没有接触的小伙伴可以参考官网文章进行了解下demo页面。
多应用
当然在单个应用大家可以配置SwaggerConfig类加载下buildDocket,就可以快速构建好swagger了。
代码大致如下:
/** * Swagger2配置类 * 在与spring boot集成时,放在与Application.java同级的目录下。 * 通过@Configuration注解,让Spring来加载该类配置。 * 再通过@EnableSwagger2注解来启用Swagger2。 */ @Configuration @EnableSwagger2 public class SwaggerConfig { /** * 创建API应用 * apiInfo() 增加API相关信息 * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现, * 本例采用指定扫描的包路径来定义指定要建立API的目录。 * * @return */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller")) .paths(PathSelectors.any()) .build(); } /** * 创建该API的基本信息(这些基本信息会展现在文档页面中) * 访问地址:http://项目实际地址/swagger-ui.html * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Spring Boot中使用Swagger2构建RESTful APIs") .description("更多请关注http://www.baidu.com") .termsOfServiceUrl("http://www.baidu.com") .contact("sunf") .version("1.0") .build(); } }
3|0模块化-Starter
缘由
有开发过微服务的小伙伴应该体会过。当微服务模块多的情况下,每个模块都需要配置这样的一个类进行加载swagger。造成每个模块都存在大致一样的SwaggerConfig,
极端的情况下,有些朋友复制其他模块的SwaggerConfig
进行改造之后,发现仍然加载不出swagger的情况,造成明明是复制的,为何还加载不出,排查此bug及其费时间。
在此之上,可以构建出一个swagger-starter
模块,只需要引用一个jar,加载一些特殊的配置,就可以快速的使用到swagger的部分功能了。
设计
- 创建模块swagger-spring-boot-starter。
- 功能大致如下:
- 加载SwaggerConfig。
通过配置化配置swagger。
Enable加载注解。
1. 创建SwaggerConfig
SwaggerConfig和之前的一致,只是里面的配置需要外部化。
@Configuration @PropertySource(value = "classpath:swagger.properties", ignoreResourceNotFound = true, encoding = "UTF-8") @EnableConfigurationProperties(SwaggerProperties.class) public class SwaggerConfig { @Resource private SwaggerProperties swaggerProperties;<em>本文来源gao.dai.ma.com搞@代*码(网$</em> @Bean public Docket buildDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInf()) .select() .apis(RequestHandlerSelectors.basePackage("")) .paths(PathSelectors.any()) .build(); } private ApiInfo buildApiInf() { return new ApiInfoBuilder() .title(swaggerProperties.getTitle()) .description(swaggerProperties.getDescription()) .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl()) .contact(new Contact("skyworth", swaggerProperties.getTermsOfServiceUrl(), "")) .version(swaggerProperties.getVersion()) .build(); } }