Swagger
什么是Swagger:
号称世界上最流行的Api框架
Swagger 是一个规范且完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。
Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口,可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 Swagger 进行正确定义,用户可以理解远程服务并使用最少实现逻辑与远程服务进行交互。与为底层编程所实现的接口类似,Swagger 消除了调用服务时可能会有的猜测。
学习目标:
- 了解Swagger的作用和概念
- 了解前后端分离
- 在springBoot中集成Swagger
官网:https://swagger.io/
在项目中使用Swagger需要spirngbox;
- swagger2
- ui
SpringBoot集成Swagger
1新建一个springboot=web项目.
2.导入相关依赖
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
3.编写一个helloword工程
4.配置swagger==>config
package com.lwq.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author
* @since 2020/8/9 22:05
*/
@Configuration //配置到配置里面
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
}
5.测试运行,地址栏写http://localhost:8080/swagger-ui.html 默认会进这个页面 (新版本依赖3.0无法进入这个页面,需要降级)
配置Swagger
Swagger的bean实例Docket;
package com.lwq.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;
/**
* @author
* @since 2020/8/9 22:05
*/
@Configuration //配置到配置里面
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
@Bean
//配置了swagger的Docket的bean实例
public Docket getDocket() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
//配置swagger信息:=apiinfo
private ApiInfo apiInfo() {
//作者信息
Contact contact = new Contact("小明", "https://mp.csdn.net/console/home", "495470602@qq.com");
return new ApiInfo("我的swaggerAPI文档",
"努力终有回报",
"v1.0",
"https://mp.csdn.net/console/home",
contact, "Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
现在我们就对刚才那个页面进行了一些简单的配置,看效果如下:
Swagger配置扫描接口
Docket.select();
package com.lwq.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
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;
/**
* @author
* @since 2020/8/9 22:05
*/
@Configuration //配置到配置里面
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
@Bean
//配置了swagger的Docket的bean实例
public Docket getDocket() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.select()
// RequestHandlerSelectors 配置要扫描接口的方式
//basePackage指定要扫描的包
//any() 扫描全部
//none() 都不扫描
//withClassAnnotation() 扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation() 扫描方法的注解
.apis(RequestHandlerSelectors.basePackage("com.lwq.swagger.controller"))
//paths()过滤扫描路径
.paths(PathSelectors.ant("/lwq/**"))
.build();
}
//配置swagger信息:=apiinfo
private ApiInfo apiInfo() {
//作者信息
Contact contact = new Contact("小明", "https://mp.csdn.net/console/home", "495470602@qq.com");
return new ApiInfo("我的swaggerAPI文档",
"努力终有回报",
"v1.0",
"https://mp.csdn.net/console/home",
contact, "Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
配置是否启动swagger,设置这个属性为false
我们在进刚才那个页面我们会发现如下效果:
小题目:
我只希望我的swagger在生产环境中使用,在发布的时候不使用
- 判断是不是生产环境 flag=false
- 注入enable(flag)
第一步模仿环境新建2个properties文件,如:
我们设置的启动的环境值为dev,在调用Profiles.of设置显示的环境,最后通过environment.acceptsProfiles判断是否处在自己设定的环境中,在enable把flag放里面就可以做到我们想要的效果了,这样启动后端口后为application-dev.properties的端口号(8081)