一、Swagger使用
在项目中使用Swagger需要导入俩jar包
- swagger2
- ui
二、SpringBoot 继承Swagger
- 新建一个SpringBoot项目
- 导入相关依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
3.编写测试类,目的是测试新建的项目是可以运行启动的
4.配置Swagger ==>编写一个config
@Configuration
@EnableSwagger2
public class SwaggerConfig {
}
5.测试运行
启动springboot项目
访问http://localhost:8080/swagger-ui.html
三、配置Swagger
Swagger的Bean实例 Docket
@Configuration
@EnableSwagger2 //开启Swagger
public class SwaggerConfig {
//配置Swagger的Bean实例 Docket
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
//配置Swagge信息====apiInfo
private ApiInfo apiInfo(){
Contact DEFAULT_CONTACT = new Contact("Qdog", "https://www.baidu.com/", "123@qq.com");
return new ApiInfo(
"Qdog的Swagger API文档",
"不想当将军的士兵不是好士兵",
"v1.0",
"https://www.baidu.com/",
DEFAULT_CONTACT,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
四、配置Swagger扫描接口
Docket.select()
//配置Swagger的Bean实例 Docket
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage():指定要扫描的包,最常用的是这个
//any():扫描全部的包
//none():不扫描
//withClassAnnotation():扫描类上的注解,参数是一个类上的注解的反射对象
//withMethodAnnotation():扫描方法上的注解,参数是方法上的注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.sun.swagger.controller"))
// .apis(RequestHandlerSelectors.any())
// .apis(RequestHandlerSelectors.none())
// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
// .apis(RequestHandlerSelectors.withMethodAnnotation(RequestMapping.class))
//paths():过滤什么路径
.paths(PathSelectors.ant("/sun/**"))
.build();
}
五、配置Swagger是否启动
//配置Swagger的Bean实例 Docket
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.enable(false)//是否启动Swagger,false在浏览器中不能访问Swagger,默认true
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage():指定要扫描的包,最常用的是这个
//any():扫描全部的包
//none():不扫描
//withClassAnnotation():扫描类上的注解,参数是一个类上的注解的反射对象
//withMethodAnnotation():扫描方法上的注解,参数是方法上的注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.sun.swagger.controller"))
// .apis(RequestHandlerSelectors.any())
// .apis(RequestHandlerSelectors.none())
// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
// .apis(RequestHandlerSelectors.withMethodAnnotation(RequestMapping.class))
//paths():过滤什么路径
// .paths(PathSelectors.ant("/sun/**"))
.build();
}
Swagger在开发环境使用,正式环境不使用
//配置Swagger的Bean实例 Docket
@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)//是否启动Swagger,false在浏览器中不能访问Swagger,默认true
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage():指定要扫描的包,最常用的是这个
//any():扫描全部的包
//none():不扫描
//withClassAnnotation():扫描类上的注解,参数是一个类上的注解的反射对象
//withMethodAnnotation():扫描方法上的注解,参数是方法上的注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.sun.swagger.controller"))
// .apis(RequestHandlerSelectors.any())
// .apis(RequestHandlerSelectors.none())
// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
// .apis(RequestHandlerSelectors.withMethodAnnotation(RequestMapping.class))
//paths():过滤什么路径
// .paths(PathSelectors.ant("/sun/**"))
.build();
}
六、配置Swagger分组
.groupName(“Qdog”)
//配置Swagger的Bean实例 Docket
@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)//是否启动Swagger,false在浏览器中不能访问Swagger,默认true
.groupName("Qdog")
.select()
//RequestHandlerSelectors 配置要扫描接口的方式
//basePackage():指定要扫描的包,最常用的是这个
//any():扫描全部的包
//none():不扫描
//withClassAnnotation():扫描类上的注解,参数是一个类上的注解的反射对象
//withMethodAnnotation():扫描方法上的注解,参数是方法上的注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.sun.swagger.controller"))
// .apis(RequestHandlerSelectors.any())
// .apis(RequestHandlerSelectors.none())
// .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
// .apis(RequestHandlerSelectors.withMethodAnnotation(RequestMapping.class))
//paths():过滤什么路径
// .paths(PathSelectors.ant("/sun/**"))
.build();
}
配置多个分组
@Bean
public Docket docket2(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("Qying");
}
@Bean
public Docket docket3(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("华为");
}
@Bean
public Docket docket4(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("iPhone");
}
七、配置Swagger配置实体类
//@ApiModel("用户") 在对象上
// @ApiModelProperty("用户名") 在对象的字段上
// @ApiModelProperty value–字段说明 name–重写属性名字 dataType–重写属性类型 required–是否必填 example–举例说明 hidden–隐藏
@ApiModel("用户")
public class User {
@ApiModelProperty(value = "用户名",example = "悟空",required = true)
public String username;
@ApiModelProperty("密码")
public String password;
}
//@Api 用在Controller类上 tags:表示说明, value: 字段说明, description: 注释说明这个类
// @ApiOperation("test2方法") 用 在controller方法上 value: 字段说明 notes: 注释说明 httpMethod: 说明这个方法被请求的方式 response: 方法的返回值的类型
@Api(tags = "TestSwaggerOneController控制器")
@RestController
public class TestSwaggerOneController {
@GetMapping("/test1")
public String test1(){
return "你好";
}
//只要接口中返回值存在实体类,就会扫描到Swagger中
@PutMapping("/user")
public User user(){
return new User();
}
//@ApiOperation("test2方法") 用在方法上
@ApiOperation(value = "test2方法")
@GetMapping("/test2")
public String test2(@ApiParam("用户名") String username){
return "你好"+username;
}
总结
1.添加注释
2.文档实时更新
3.可以在线测试
【注意】在正式环境要关闭Swagger,安全考虑