學(xué)習(xí)地址
https://www.bilibili.com/video/av64841843
https://www.ibm.com/developerworks/cn/java/j-using-swagger-in-a-spring-boot-project/index.html
創(chuàng)建項(xiàng)目引入依賴
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
創(chuàng)建swagger配置類
package com.lv.swaggerdemo.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2//開啟Swagger
public class SwaggerConfig {
}
訪問swagger頁面
訪問:http://localhost:8080/swagger-ui.html
swagger頁面
配置swagger信息
package com.lv.swaggerdemo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
@Configuration
@EnableSwagger2//開啟Swagger
public class SwaggerConfig {
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
//作者信息
Contact contact = new Contact("lv", "baidu.com", "test@qq.com");
return new ApiInfo(
"測試title",
"測試描述",
"1.0",
"urn:tos",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList<VendorExtension>());
}
}
Swagger配置掃描接口
package com.lv.swaggerdemo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.function.Predicate;
@Configuration
@EnableSwagger2//開啟Swagger
public class SwaggerConfig {
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(apiInfo())
//配置是否啟用swagger,false為關(guān)閉
.enable(false)
.select()
//RequestHandlerSelectors配置要掃描接口的方式
//RequestHandlerSelectors.basePackage指定要掃描的包
//any()掃描全部
//none()全部不掃描
//withMethodAnnotation:掃描方法上的注解
//withClassAnnotation:掃描類上的注解
.apis(RequestHandlerSelectors.basePackage("com.lv.swaggerdemo.controller"))
//paths()膘格。過濾什么路徑(如下:過濾所有/hello開頭的請求)
// .paths(PathSelectors.ant("/hello/**"))
.build()
;
}
private ApiInfo apiInfo() {
//作者信息
Contact contact = new Contact("lv", "baidu.com", "test@qq.com");
return new ApiInfo(
"測試title",
"測試描述",
"1.0",
"urn:tos",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList<VendorExtension>());
}
}
設(shè)置生產(chǎn)環(huán)境才啟用swagger
//設(shè)置要顯示的swagger環(huán)境
Profiles dev = Profiles.of("dev");
//通過environment.acceptsProfiles()判斷處在自己設(shè)置的環(huán)境中
boolean flag = environment.acceptsProfiles(dev);
return new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(apiInfo())
//配置是否啟用swagger彩匕,false為關(guān)閉
.enable(flag)
.select()
//RequestHandlerSelectors配置要掃描接口的方式
//RequestHandlerSelectors.basePackage指定要掃描的包
//any()掃描全部
//none()全部不掃描
//withMethodAnnotation:掃描方法上的注解
//withClassAnnotation:掃描類上的注解
.apis(RequestHandlerSelectors.basePackage("com.lv.swaggerdemo.controller"))
//paths()。過濾什么路徑(如下:過濾所有/hello開頭的請求)
// .paths(PathSelectors.ant("/hello/**"))
.build()
;
}
配置多個(gè)分組
//如果需要多個(gè)分組堪伍,則配置多個(gè)swagger
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("測試組2");
}
@Bean
public Docket docket(Environment environment) {
//設(shè)置要顯示的swagger環(huán)境
Profiles dev = Profiles.of("dev");
//通過environment.acceptsProfiles()判斷處在自己設(shè)置的環(huán)境中
boolean flag = environment.acceptsProfiles(dev);
return new Docket(DocumentationType.SWAGGER_2)
//配置swagger信息
.apiInfo(apiInfo())
//設(shè)置分組
.groupName("測試組")
接口注釋
controller中
//只要接口中存在實(shí)體類,它就會被掃描到wagger中
@PostMapping("/user")
//ApiOperation接口,描述接口的
@ApiOperation("Hello控制類")
public User user(@ApiParam("用戶名") String username){
return new User();
}
實(shí)體類中
package com.lv.swaggerdemo.bean;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("用戶實(shí)體類")
public class User {
@ApiModelProperty("用戶名")
private String username;
@ApiModelProperty("密碼")
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
springboot中shiro過濾swagger的請求
網(wǎng)上有些文章是這樣配置的觅闽,但是我測試后不能正常訪問
filterMap.put("/swagger-ui.html", "anon");
filterMap.put("/swagger-resources/**", "anon");
filterMap.put("/v2/**", "anon");
filterMap.put("/webjars/**", "anon");
改為以下配置后生效帝雇,在shiro配置文件中:
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
//不需要權(quán)限也能訪問
chainDefinition.addPathDefinition("/swagger-ui.html", "anon");
chainDefinition.addPathDefinition("/swagger-resources", "anon");
chainDefinition.addPathDefinition("/swagger-resources/configuration/security", "anon");
chainDefinition.addPathDefinition("/swagger-resources/configuration/ui", "anon");
chainDefinition.addPathDefinition("/v2/api-docs", "anon");
chainDefinition.addPathDefinition("/webjars/springfox-swagger-ui/**", "anon");
// 其他所有頁面必須驗(yàn)證
chainDefinition.addPathDefinition("/**", "authc");
return chainDefinition;
}