在项目中使用swagger需要springbox
- swagger2
- ui
SpringBoot集成Swagger
1.新建一个SpringBoot=web项目
2.导入相关依赖
<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.编写helloword工程
4.配置Swagger==》Config配置
@Configuration
@EnableSwagger2
public class SwaggerConfig {
//不写也可以默认启动
}
5.测试运行
http://localhost:8080/swagger-ui.html
Config配置
配置api信息
@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(){
//作者信息
Contact contact = new Contact("土拨鼠", "https://www.cbbpp.xyz", "294453293@qq.com");
return new ApiInfo("土拨鼠SwaggerAPI文档",
"不打无准备的仗",
"v1.0",
"urn:tos", contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
配置扫描接口
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//RequestHandlerSelectors配置接口要扫描的方式
//basePackage():扫描指定目录下的包 (常用)
// any():扫描全部
// none():都不扫描
// withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.cbbpp.swagger.controller"))
//过滤路径,也就是controller下的方法的请求路径的一个过滤
.paths(PathSelectors.ant("/cbbpp/**"))
.build();
}
}
配置是否启动swagger,用enable()
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//是否启动swagger,false为不启动,true为启动
.enable(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com.cbbpp.swagger.controller"))
//过滤路径,也就是controller下的方法的请求路径的一个过滤
.paths(PathSelectors.ant("/cbbpp/**"))
.build();
}
}
我只希望我的Swagger在生产环境中使用,发布的时候不使用
可以进行如下配置
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
//设置要使用的swagger环境,生产环境或者线上环境(也就是多生产配置文件application.yml)
Profiles profiles = Profiles.of("dev");
//获取项目的环境
//通过environment.acceptsProfiles来判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//是否启动swagger,false为不启动,true为启动
.enable(flag)
.select()
//RequestHandlerSelectors配置接口要扫描的方式
//basePackage():扫描指定目录下的包 (常用)
// any():扫描全部
// none():都不扫描
// withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation:扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.cbbpp.swagger.controller"))
//过滤路径,也就是controller下的方法的请求路径的一个过滤
.paths(PathSelectors.ant("/cbbpp/**"))
.build();
}
//配置swagger信息apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("土拨鼠", "https://www.cbbpp.xyz", "294453293@qq.com");
return new ApiInfo("土拨鼠SwaggerAPI文档",
"不打无准备的仗",
"v1.0",
"urn:tos", contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
即可实现生产环境中使用,发布环境不使用,enable()通过flag去进行监听
配置API文档的分组(工作中常用).group Name("土拨鼠")
配置多个Docket,用.group Name("")做分组标记
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
@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");
}
//配置了swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
//设置要使用的swagger环境,生产环境或者线上环境(也就是多生产配置文件application.yml)
Profiles profiles = Profiles.of("dev");
//获取项目的环境
//通过environment.acceptsProfiles来判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("土拨鼠")
.enable(flag)
.select()
.apis(RequestHandlerSelectors.basePackage("com.cbbpp.swagger.controller"))
.paths(PathSelectors.ant("/cbbpp/**"))
.build();
}
//配置swagger信息apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("土拨鼠", "https://www.cbbpp.xyz", "294453293@qq.com");
return new ApiInfo("土拨鼠的SwaggerAPI文档",
"不打无准备的仗",
"v1.0",
"urn:tos", contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
配置接口和方法的API信息
package com.cbbpp.swagger;
//@Api(注释)
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
package com.cbbpp.swagger.controller;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
@ApiOperation("hello控制类")//方法上的注释
@GetMapping("/hello2")
public String hello2(@ApiParam("用户名") String username){
return "hello2"+username;
}
//只要我们的接口中的,返回值存在实体类,他就会被扫描到Swagger
@PostMapping("/user")
public User user(){
return new User();
}
@ApiOperation("Post测试")//方法上的注释
@PostMapping("/postt")
public User postt(@ApiParam("用户名") User user){
return user;
}
}
总结:
- 可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
- 接口文档实时更新
- 可以在线测试