狂神的swagger筆記摘要
阿新 • • 發佈:2020-11-05
Swagger
- 我們可以通過Swagger給一些比較難理解的屬性或介面增加註釋資訊
- 介面文件實時更新
- 可以線上測試
【注意點】在正式釋出的時候,關閉Swagger!!!出於安全考慮,能節省記憶體。
Swagger-ui 2.X
預設訪問的地址是:http://localhost:8080/swagger-ui.html
-
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>
-
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(); //工廠模式 創造什麼東西 }
-
配置是否啟動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(); //------------------------- }
-
需求:我只希望我的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(); }
-
配置API文件的分組
.groupName("喂喂喂")
-
如何配置多個分組?(多個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("喂喂喂"); }
-
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() ); } }
-
關於Swagger頁面中的Models:只要我們的介面中,返回值存在實體類,他就會被掃描到Swagger中。
Swagger-ui 3.0
預設訪問的地址是:http://localhost:8080/swagger-ui/index.html
-
pom.xml
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-boot-starter</artifactId> <version>3.0.0</version> </dependency>