我们知道前后端分离后,不管是做前端还是后端都会接触一些接口文档。作为工作的沟通的某一种 介质
,大家按照既定的规定各自开发,对接上线。但是实际开发并非这么顺畅,接口总是不断的变化调整,势必浪费很多精力。特别是前后端集成,前端或者后端无法做到“及时协商、尽早解决”,最终倒是问题集中爆发。
实时跟踪最新API、降低集成风险
Swagger 介绍
要求: JDK1.8+ 否则Swagger2无法运行
创建SpringBoot工程,添加web、swagger依赖。启动项目,确保运行正常。
Swagger2相关依赖
<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>
完整依赖
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<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>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
dependencies>
@Configuration //配置类
@EnableSwagger2// 开启Swagger2的自动配置
public class SwaggerConfig {
}
启动项目,浏览器输入:
http://localhost:8080/swagger-ui.html
配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig {
/**
* 配置Swagger Bean实例
* @return
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
// 设置swagger-ui.html页面上的一些元素信息
.apiInfo(apiInfo())
// 是否启用Swagger
// .enable(false)
// 配置扫描接口及API
.select()
// 配置要扫描借口的方式
// basePackage:指定扫描的包 com.xxx.xxx
// any: 全扫描
// none: 不扫描
// withClassAnnotation: 扫描类上的注解 (传递注解class,表示只扫描有该注解的类)
// withMethodAnnotation: 扫描方法上的注解
// 扫描的包路径
.apis(RequestHandlerSelectors.basePackage("com.daobili.controller"))
// 过滤什么路径
// ant: .ant("/api/**") 表示只扫描/api/**开头的的接口
// any: 过滤全部的
// none: 不过滤全部的
// regex: 正则
.paths(PathSelectors.any())
.build();
}
/**
* 配置Swagger详细信息 ApiInfo
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 标题
.title("SpringBoot整合Swagger")
// 描述
.description("SpringBoot整合Swagger,详细信息......")
// 版本号
.version("1.0")
// 作者信息
.contact(new Contact("巴莫", "http://www.taiyangyi.com","[email protected]"))
.build();
}
}
思考:如何使Swagger只在测试或开发中使用,在生产环境中不使用
@Configuration
@EnableSwagger2
public class SwaggerConfig2 {
/**
* 配置Swagger Bean实例
* @return
*/
@Bean
public Docket createRestApi(Environment env) {
// 获取项目环境
// 设置要显示的Swagger环境
// 通过springboot环境,判断是否处在自己设定的环境
Profiles of = Profiles.of("dev","test");
boolean flag = env.acceptsProfiles(of);
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
// 是否启用Swagger
.enable(flag)
// 配置扫描接口及API
.select()
// 配置要扫描借口的方式
// basePackage:指定扫描的包 com.xxx.xxx
// any: 全扫描
// none: 不扫描
// withClassAnnotation: 扫描类上的注解 (传递注解class,表示只扫描有该注解的类)
// withMethodAnnotation: 扫描方法上的注解
// 扫描的包路径
.apis(RequestHandlerSelectors.basePackage("com.daobili.controller"))
// 过滤什么路径
// ant: .ant("/api/**") 表示只扫描/api/**开头的的接口
// any: 过滤全部的
// none: 不过滤全部的
// regex: 正则
.paths(PathSelectors.any())
.build();
}
/**
* 配置Swagger详细信息 ApiInfo
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 标题
.title("SpringBoot整合Swagger")
// 描述
.description("SpringBoot整合Swagger,详细信息......")
// 版本号
.version("1.0")
// 作者信息
.contact(new Contact("巴莫", "http://www.taiyangyi.com","[email protected]"))
.build();
}
}
application.properties
spring.profiles.active=dev
application-dev.properties 开发环境
server.port=8081
application-prod.properties 生产环境
server.port=8082
//@Configuration
//@EnableSwagger2
public class SeaggerConfig3 {
@Bean
public Docket docketA(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docketB(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docketC(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
// 配置Swagger Bean实例
@Bean
public Docket docket(Environment env){
// 获取项目环境
// 设置要显示的Swagger环境
// 通过spingboot环境,判断是否处在自己设定的环境
Profiles of = Profiles.of("dev","test");
boolean flag = env.acceptsProfiles(of);
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
// 分组名字
.groupName("x模块")
// 是否启用Swagger
.enable(flag)
// 配置扫描借口及API
.select()
// 配置要扫描借口的方式
// basePackage:指定扫描的包 com.xxx.xxx
// any: 全扫描
// none: 不扫描
// withClassAnnotation: 扫描类上的注解 (传递注解class,表示只扫描有该注解的类)
// withMethodAnnotation: 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.xxx.xxx.controller"))
// 过滤什么路径
// ant: .ant("/api/**") 表示只扫描/api/**开头的的接口
// any: 过滤全部的
// none: 不过滤全部的
// regex: 正则
.paths(PathSelectors.any())
.build();
}
/**
* 配置Swagger详细信息 ApiInfo
* @return
*/
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 标题
.title("SpringBoot整合Swagger")
// 描述
.description("这是xxx项目的Restful Api文档")
// 版本号
.version("1.0")
// 作者信息
.contact(new Contact("巴莫", "http://www.taiyangyi.com","[email protected]"))
.build();
}
}
@ApiModel(description = "用户类")
public class User {
@ApiModelProperty("用户id")
private Long id;
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("用户地址")
private String address;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
快速搭建
@Api("用户管理接口")
@RestController
@RequestMapping("/user")
public class UserController {
@ApiOperation("根据id查询用户")
@ApiImplicitParam(name = "id", value = "用户id", defaultValue = "99")
@GetMapping("/")
public User getUserById(Long id) {
User user = new User();
user.setId(id);
return user;
}
@ApiOperation("根据id更新用户名")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "用户id", defaultValue = "99"),
@ApiImplicitParam(name = "username", value = "用户名", defaultValue = "bamaw")
})
public User updateUsernameById(String username, Long id) {
User user = new User();
user.setId(id);
user.setUsername(username);
return user;
}
@ApiOperation("根据id更新用户信息")
@PutMapping("/{id}")
public User updateUserById(@RequestBody User user) {
return user;
}
@ApiOperation("添加用户")
@PostMapping("/")
public User addUser(@RequestBody User user) {
return user;
}
@ApiOperation("根据id删除用户")
@DeleteMapping("/{id}")
public void deleteUserById(@PathVariable Long id) {
}
@GetMapping("/hello")
public String hello(String name) {
return "hello " + name;
}
}
Swagger的所有注解定义在io.swagger.annotations包下
@Api
@ApiOperation
@ApiParam 对象类型参数,文件类型参数
@ApiImplicitParams
@ApiImplicitParam
@ApiModel
@ApiModelProperty
本教程配套仓库