1,Swagger简介
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,后端集成下Swagger,然后就可以提供一个在线文档地址给前端
2,集成Swagger框架
1.导入pom依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
这两个,一个用来生成接口文档(JSON 数据),另一个用来展示将 JSON 可视化。
注:swagger2.x.x与swagger3.x.x区别:
在 3.0 版本中,不需要这么麻烦了,一个 starter 就可以搞定:
<dependency>
<groupid>io.springfox</groupid>
<artifactid>springfox-boot-starter</artifactid>
<version>3.0.0</version>
</dependency>
和 Spring Boot 中的其他 starter 一样,springfox-boot-starter 依赖可以实现零配置以及自动配置支持。也就是说,如果你没有其他特殊需求,加一个这个依赖就行了,接口文档就自动生成了。
接口地址
3.0 中的接口地址也和之前有所不同,以前在 2.9.2 中我们主要访问两个地址:
文档接口地址:http://localhost:8080/v2/api-docs
文档页面地址:http://localhost:8080/swagger-ui.html
现在在 3.0 中,这两个地址也发生了变化:
文档接口地址:http://localhost:8080/v3/api-docs
文档页面地址:http://localhost:8080/swagger-ui/index.html
特别是文档页面地址,如果用了 3.0,而去访问之前的页面,会报 404。
注解旧的注解还可以继续使用,不过在 3.0 中还提供了一些其他注解。
例如我们可以使用 @EnableOpenApi 代替以前旧版本中的 @EnableSwagger2。
2.编写SwaggerConfig配置类,配置swagger信息
package com.example.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
public class SwaggerConfig {
//配置swagger的Docket的Bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(true)//enable是否启动swagger,如果为false,则不能在浏览器中启动
.select()
//RequestHandlerSelectors:配置要扫描接口的方式
//basePackage:指定要扫描的包
.apis(RequestHandlerSelectors.basePackage("cam.example.controller"))
//过滤路径
//.paths("")
.build();
}
//配置swagger信息==apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("Huang", "", "1764095439@qq.com");
return new ApiInfo(
"Huang Api Documentation",
"Huang Api 文档",
"1.0",
"urn:tos",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
3.测试,访问http://localhost:8080/swagger-ui.html
题:如何希望自己的swagger只在dev开发中使用,在pro生产环境中不使用?
- 判断是不是开发环境 flag=true
- 注入enable(flag)
application.properties
spring.profiles.active=dev
application-dev.properties
server.port=8081
application-pro.properties
server.port=8082
@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)//enable是否启动swagger,如果为false,则不能在浏览器中启动
.select()
//RequestHandlerSelectors:配置要扫描接口的方式
//basePackage:指定要扫描的包
.apis(RequestHandlerSelectors.basePackage("cam.example.controller"))
//过滤路径
//.paths("")
.build();
}
浏览器访问http://localhost:8081/swagger-ui.html (dev开发环境):正常
访问http://localhost:8082/swagger-ui.html (pro生产环境):访问不了