文章目录
Swagger(开源)
含义
- 号称世界上最流行的API框架
- 直接运行,可以在线测试API测试
导入的依赖
在项目使用Swagger需要springbox;
- swagger2
- UI
SpringBoot集成Swagger
- 新建项目
- 导入项目依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
- 编写一个工程
- 配置swagger
package com.kuang.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}
配置Swagger
swagger的bean的实例是Docket
//配置swagger信息的apiInfo
private ApiInfo apiInfo(){
Contact contact = new Contact("", "", "");
return new ApiInfo("龙且的Api Documentation",
"Api Documentation",
"1.0",
"urn:tos",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
配置Swagger扫描接口
Docker.select()
//配置了Swagger的Docker的bean实例
@Bean
public Docket getDocker(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors:配置扫描接口的方式
//basePackage:指定要扫描的包(重要的)
//any:扫描全部
//none:都不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.kuang.controller"))
//过滤什么样的路径
.paths(PathSelectors.ant("/kuang/**"))
.build();
}
配置是否启动
@Bean
public Docket getDocker(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(flag) //是否能启动Swagger
.select() .apis(RequestHandlerSelectors.basePackage("com.kuang.controller"))
//过滤什么样的路径
// .paths(PathSelectors.ant("/kuang/**"))
.build();
}
例题
只在生产环境中使用,发布不使用
- 判断是不是生产环境 flag=false
- 注入enable
@Bean
public Docket getDocker(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.kuang.controller"))
//过滤什么样的路径
// .paths(PathSelectors.ant("/kuang/**"))
.build();
}
配置API文档的分组
.groupName("龙且")
如何配置多个分组?声明多个Docker实例就好,不能重名
@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");
}
实体类配置:
package com.kuang.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
控制类配置:
package com.kuang.controller;
import com.kuang.pojo.User;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@ApiOperation("Hello控制类") //接口
@RestController
public class HelloController {
@GetMapping(value = "/hello")
public String getHello(){
return "杀戮空间法兰克";
}
@PostMapping(value = "/hello")
public User user(){
return new User();
}
@ApiOperation("Hello控制类")
@GetMapping(value = "/hello2")
public String Hello(@ApiParam("用户名") String username){
return "hello"+username;
}
}
总结
- 可以通过Swager给一些比较难理解的属性或接口,增加注解信息
- 接口文档实时更新
- 可以在线测试
【注意点】在正式发布时,关闭Swagger!!!