springboot之swagger快速啟動
簡介
介紹
可能大家都有用過swagger
,可以通過ui
頁面顯示接口信息弦叶,快速和前端進行聯(lián)調(diào)交胚。
沒有接觸的小伙伴可以參考官網(wǎng)文章進行了解下demo頁面抽莱。
多應用
當然在單個應用大家可以配置SwaggerConfig
類加載下buildDocket
,就可以快速構(gòu)建好swagger
了衅胀。
代碼大致如下:
/**
* Swagger2配置類
* 在與spring boot集成時冯丙,放在與Application.java同級的目錄下。
* 通過@Configuration注解迹卢,讓Spring來加載該類配置辽故。
* 再通過@EnableSwagger2注解來啟用Swagger2。
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* 創(chuàng)建API應用
* apiInfo() 增加API相關(guān)信息
* 通過select()函數(shù)返回一個ApiSelectorBuilder實例,用來控制哪些接口暴露給Swagger來展現(xiàn)腐碱,
* 本例采用指定掃描的包路徑來定義指定要建立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();
}
/**
* 創(chuàng)建該API的基本信息(這些基本信息會展現(xiàn)在文檔頁面中)
* 訪問地址:http://項目實際地址/swagger-ui.html
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2構(gòu)建RESTful APIs")
.description("更多請關(guān)注http://www.baidu.com")
.termsOfServiceUrl("http://www.baidu.com")
.contact("sunf")
.version("1.0")
.build();
}
}
模塊化-Starter
緣由
有開發(fā)過微服務的小伙伴應該體會過。當微服務模塊多的情況下症见,每個模塊都需要配置這樣的一個類進行加載swagger
喂走。造成每個模塊都存在大致一樣的SwaggerConfig
,極端的情況下,有些朋友復制其他模塊的SwaggerConfig
進行改造之后谋作,發(fā)現(xiàn)仍然加載不出swagger
的情況芋肠,造成明明是復制的,為何還加載不出遵蚜,排查此bug及其費時間帖池。
在此之上,可以構(gòu)建出一個swagger-starter
模塊吭净,只需要引用一個jar
睡汹,加載一些特殊的配置,就可以快速的使用到swagger
的部分功能了寂殉。
設(shè)計
創(chuàng)建模塊swagger-spring-boot-starter
囚巴。
功能大致如下:
- 加載SwaggerConfig。
- 通過配置化配置swagger友扰。
- Enable加載注解彤叉。
1. 創(chuàng)建SwaggerConfig
SwaggerConfig
和之前的一致,只是里面的配置需要外部化村怪。
@Configuration
@PropertySource(value = "classpath:swagger.properties", ignoreResourceNotFound = true, encoding = "UTF-8")
@EnableConfigurationProperties(SwaggerProperties.class)
public class SwaggerConfig {
@Resource
private SwaggerProperties swaggerProperties;
@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();
}
}
2. 創(chuàng)建SwaggerProperties 配置相關(guān)
配置通過@PropertySource
注解加載resources
目錄下的swagger.properties
秽浇。
創(chuàng)建SwaggerProperties
配置類,這個類里包含了一般swagger初始化要使用的一些常用的屬性,如掃描包路徑甚负、title等等柬焕。
@Data
@ToString
@ConfigurationProperties(SwaggerProperties.PREFIX)
public class SwaggerProperties {
public static final String PREFIX = "swagger";
/**
* 文檔掃描包路徑
*/
private String basePackage = "";
/**
* title 如: 用戶模塊系統(tǒng)接口詳情
*/
private String title = "深蘭云平臺系統(tǒng)接口詳情";
/**
* 服務文件介紹
*/
private String description = "在線文檔";
/**
* 服務條款網(wǎng)址
*/
private String termsOfServiceUrl = "https://www.deepblueai.com/";
/**
* 版本
*/
private String version = "V1.0";
}
做好這兩件事情基本大工搞成了,為了更好的使用配置腊敲,在idea里和官方starter
包一樣击喂,我們還需要配置一個additional-spring-configuration-metadata.json
,讓我們自己的配置也具有提示的功能,具體介紹請產(chǎn)考:配置提示 配置提示 配置提示 配置提示 配置提示 ...
3. 加載SwaggerConfig等特性
因為是starter模塊碰辅,可能他人的項目目錄和starter模塊的目錄不一致懂昂,導致加載不到SwaggerConfig
類,我們需要使用spring.factories
把SwaggerConfig
類裝載到spring容器没宾。
resources/META-INF
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.purge.swagger.SwaggerConfig
當然本次基于Enable方式去加載SwaggerConfig
凌彬。
創(chuàng)建@EnableSwaggerPlugins注解類,使用@Import(SwaggerConfig.class)
將SwaggerConfig
導入大工搞成循衰。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(SwaggerConfig.class)
@EnableSwagger2
public @interface EnableSwaggerPlugins {
}
使用
添加依賴
把自己編寫好的swagger
通過maven
打包铲敛,自己項目引用。
<dependency>
<groupId>com.purgeteam</groupId>
<artifactId>swagger-spring-boot-starter<factId>
<version>0.1.0.RELEASE</version>
</dependency>
配置swagger.properties文件
在自己項目模塊的
resources
目錄下 創(chuàng)建swagger.properties
配置swagger.properties 大致配置如下
swagger.basePackage="swagger掃描項目包路徑"
swagger.title="swagger網(wǎng)頁顯示標題"
swagger.description="swagger網(wǎng)頁顯示介紹"
啟動類添加
@EnableSwaggerPlugins
注解会钝。
@EnableSwaggerPlugins
@SpringBootApplication
public class FrontDemoApplication {
public static void main(String[] args) {
SpringApplication.run(FrontDemoApplication.class, args);
}
}
訪問http://ip:端口/swagger-ui.html
檢查swagger-ui是否正常伐蒋。
總結(jié)
簡單的starter
代碼編寫可以減少新模塊的復雜性工三,只需要簡單的配置就可以使用相應的特性,減少復制代碼不必要的錯誤先鱼。
示例代碼地址: swagger-spring-boot