新建一个SpringBoot
###导入相关依赖
<!-- 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>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
###编写一个hello工程
##配置Swagger => Config
在config > SwaggerConfig
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
}
###测试
访问:localhost:8080/swagger-ui.html
##界面可以改
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.api睿共享 Info(apiInfo());
}
//配置Swagger 信息 = apiInfo
private ApiInfo apiInfo(){
Contact contact = new Contact("rrr", "http://www.r.com/", "1760@qq.com");
return new ApiInfo(
"Rzk睿共享 的SwaggerAPI文档",
"书山有路勤为径,学海无涯苦作舟",
"1.0",
"http://www.r.com/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
###访问
localhost:8080/swagger-ui.html
##扫描接口
@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.rzk.swagger.controller"))
.paths(PathSelectors.ant("/rzk/**"))
.build()
;
}
//配置Swagger 信息 = apiInfo
private ApiInfo apiInfo(){
Contact contact = new Contact("楷哥", "http://www.ruizhukai.com/", "1769073060@qq.com");
return new ApiInfo(
"Rzk的SwaggerAPI文档",
"书山有路勤为径,学海无涯苦作舟",
"1.0",
"http://www.ruizhukai.com/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
如果加上 enable(false) 页面就访问不了
是否启动swagger 如果false就不能访问
###希望在Swagger在生产环境中使用,在发布的使用不使用?
- 判断是不是生产环境
- 注入enable()
####新建三个配置类
####SwaggerConfig配置类
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了Swagger的Docket的bean实例
@Bean
public Docket docket(Environment environment){
//设置要显示的Swagger环境
Profiles profiles= Profiles.of("dev");
//通过environment.acceptsProfiles 判断是否处在自己设定的环境当中 获取项目的环境
boolean flag = en睿共享 vironment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.enable(flag)
.select()
//RequestHandlerSelectors,配置要烧苗接口的方式
//basePackage;指定要扫描的包
//any(睿共享 ):扫描全部
//none():不扫描
//withClassAnnotation():扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation():扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.rzk.swagger.controller"))
.paths(PathSelectors.ant("/rzk/**"))
.build()
;
}
}
##配置多个API文档的 分组
.groupName(“文档一”)
###配置多个
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("文档二")
;
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("文档三")
;
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("文档四")
;
}
@Bean
睿共享 public Docket docket4(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("文档五")
;
}
##如果controller返回实体类,会被扫描到Swagger里面
//只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger
@PostMapping(value = "/user")
public User user(){
return new User();
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
private String perms;
}
###在实体类加上api文档注释
给实体类加注释 @ApiModel
字段上加注释 @ApiModelProperty
给方法加上注释,而不是类上:@ApiOperation(“user控制类”)
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户Id")
private int id;
@ApiModelProperty("用户名")
private String name;
@ApiModelProperty("用户密码")
private String pwd;
@ApiModelProperty("用户权限")
private String perms;
}
####查看
###在Swagger上测试
//只要我们的接口中,返回值中存在实体类,他就会被扫描到Swagger
@ApiOperation("user控制类")
@PostMapping(value = "/user")
public User user(@ApiParam("用户") User user){
return new User();
}
找到Post的/user进行测试
如果有错误,会很清楚的标记出错误
##总结
1.可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
2.接口文档实时更新
3.可以在线测试