学习视频指路–>【狂神说Java】一小时掌握Swagger
1、通过Swagger给一些比较难理解的属性或者接口增加注释信息
2、接口文档实时更新
3、可以在线测试
1、创建springboot-web项目
2、导入相关依赖–>maven仓库查询相关依赖
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger2artifactId>
<version>2.9.2version>
dependency>
<dependency>
<groupId>io.springfoxgroupId>
<artifactId>springfox-swagger-uiartifactId>
<version>2.9.2version>
dependency>
3、配置Swagger
1>创建Swagger的配置类,开启
Swagger的bean实例Docket;
package com.tiki.swagger.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.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了Swagger的bean实例-->Docket
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
//配置Swagger信息-->apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("TiTi","https://www.csdn.net/","12345@123.com");
return new ApiInfo(
"Swagger的Api文档",
"对Api文档的描述",
"1.0",
"https://www.csdn.net/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
Docket.select()
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors配置要扫描接口的方式
//basePackage:指定要扫描的包
//any():扫描全部
//none():不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.tiki.swagger.controller"))
//.apis(RequestHandlerSelectors.withMethodAnnotation(GetMapping.class))
//paths():过滤什么路径-->一开始定义了扫描com.tiki.swagger.controller下的接口,现在又定义了只扫描这个路径下titi下的接口,过滤指的是扫描什么,留下什么而不是去除什么
.paths(PathSelectors.ant("/titi/**"))
.build();
}
1、先模拟配置两个配置类,一个是开发的,一个是发布的,指定各自的端口号
application-dev.yml
server:
port: 8081
application-pro.yml
server:
port: 8082
在application.yml中指定激活的开发环境
spring:
profiles:
active: dev
2、在SwaggerConfig类中
@Bean
public Docket docket(Environment environment){
//设置要显示的Swagger环境
Profiles profiles=Profiles.of("dev","test");
//通过environment.acceptsProfiles判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag)
.select()
//RequestHandlerSelectors配置要扫描接口的方式
//basePackage:指定要扫描的包
//any():扫描全部
//none():不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.tiki.swagger.controller"))
//.apis(RequestHandlerSelectors.withMethodAnnotation(GetMapping.class))
//paths():过滤什么路径-->一开始定义了扫描com.tiki.swagger.controller下的接口,现在又定义了只扫描这个路径下titi下的接口,过滤指的是扫描什么,留下什么而不是去除什么
//.paths(PathSelectors.ant("/titi/**"))
.build();
}
.groupName("TiKi")
配置多个分组,使用多个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");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
//@Api("注释")
@ApiModel("用户实体类")//给实体类加文档注释
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
@RestController
public class HelloController {
@GetMapping(value = "/hello")
public String hello(){
return "hello";
}
//只要接口的返回值中存在实体类,就会被扫描到Swagger中
@PostMapping(value = "/user")
public User user(){
return new User();
}
//Operation接口,不是放在类上,是方法上
@ApiOperation("Hello控制类")
@GetMapping(value = "/hello2")
public String hello2(@ApiParam("用户名") String username){
return "hello"+username;
}
@ApiOperation("Post测试类")
@PostMapping(value = "/postt")
public User postt(@ApiParam("用户") User user){
return user;
}
}