SpringBoot集成Swagger
-
新建spring-boot-web项目
-
导入相关依赖
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
-
编写hello工程
-
配置Swagger ===> Config
@Configuration @EnableSwagger2 //开启Swagger2 public class SwaggerConfig { }
-
测试运行
配置Swagger信息
Swagger的bean实例Docket
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置Swagger的Docket的bean实例
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}
//配置Swagger信息 => ApiInfo
private ApiInfo apiInfo() {
return new ApiInfo("dyh接口日记",
"dyh的接口日记",
"1.0", "http://locahost:8080",
new Contact("dyh", "http://locahost:8080", "277151026@qq.com"), "Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
Swagger配置扫描接口
Docket.select()
//配置Swagger的Docket的bean实例
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors:配置扫描接口的方式
//basePackage:指定要扫描的包
//any:扫描全部
//none:不扫描
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.any())
//过滤什么路径
.paths(PathSelectors.ant("/dyh/**"))
.build();
}
配置是否启动Swagger
//配置Swagger的Docket的bean实例
@Bean
public Docket docket() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable是否启动Swagger,如果false,则Swagger不能在浏览器访问
.enable(false)
.select()
.apis(RequestHandlerSelectors.any())
//过滤什么路径
//.paths(PathSelectors.ant("/dyh/**"))
.build();
}
我希望Swagger在生产环境时使用,发布的时候不用?
- 判断是不是生产环境 flag = false
- 设置enable(flag)
//配置Swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment) {
//获取项目的环境
//设置要显示的Swagger环境
Profiles profiles = Profiles.of("dev");
//通过environment.acceptsProfiles判断是否处在自己设定的环境当中
boolean flog = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//enable是否启动Swagger,如果false,则Swagger不能在浏览器访问
.enable(flog)
.select()
.apis(RequestHandlerSelectors.any())
//过滤什么路径
//.paths(PathSelectors.ant("/hello"))
.build();
}
配置API文档的分组
.groupName("dyh")
如何配置多个分组;多个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");
}
@Bean
public Docket docket4() {
return new Docket(DocumentationType.SWAGGER_2).groupName("D");
}
实体类配置
package com.example.swagger.pojo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @author dyh
* @date 2021/6/17 - 10:49
* @description:
*/
//@Api("用户实体类")
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
controller
package com.example.swagger.controller;
import com.example.swagger.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;
/**
* @author dyh
* @date 2021/6/16 - 17:54
* @description:
*/
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
//只要接口中返回值存在实体类就会被扫描到Swagger中
@PostMapping("/user")
public User user() {
return new User();
}
//Operation接口不是放在类上
@ApiOperation("Hello控制类")
@GetMapping("/hello2")
public String hello2(@ApiParam("用户名") String username) {
return "hello" + username;
}
}
总结
- 可以给复杂的属性接口添加注释
- 接口文档实时更新
- 可以在线测试