目录
1.问题:我只希望我的Swagger在生产环境中使用,在发布的时候不适用?
1.Swagger产生的背景
前后端分离的流行(Vue+SpringBoot )我们在对接前后端的时候,都需要提供相应的接口文档。对于后端来说,编写接口文档即费时费力,还会经常因为没有及时更新,导致前端对接时出现实际接口与文档不一致。而且手写接口文档还容易出错,而swagger很好的解决了这个痛点。
2.Swagger的简介
-
Swagger号称世界上最流行的Api框架
-
RESTful Api 文档在线自动生成工具=>ApI文档与API定义自动更新
-
直接运行,在线测试API接口
-
支持多种语言:JAVA,PHP.等
3.SpringBoot集成Swagger的使用
1.Swagger需要springbox;
-
Swagger2
-
ui
2.导入相关依赖
<!-- 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>
3.编写一个hello world
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello world";
}
4.配置Swagger=>Config类
@Configuration
@EnableSwagger2//开启Swagger
public class SwaggerConfig {
}
5.访问Swagger页面
http://localhost:8080/swagger-ui.html
6.自定义Swagger界面
@Configuration
@EnableSwagger2//开启Swagger
public class SwaggerConfig {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("朱笑笑")
.enable(true)
.select()
.apis(RequestHandlerSelectors.basePackage("com.kuang.swagger.controller"))
.build()
;
}
// 配置Swagger基本信息,有用的话,也就是题目和标题罢了
private ApiInfo apiInfo(){
Contact contact = new Contact("笑笑","http://baidu.com/","2844509367@qq.com");
return new ApiInfo(
"朱笑笑的Swagger文档",
"天边的天边",
"v1.0",
"http://baidu.com/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
4.Swagger的常见的问题如何解决?
1.问题:我只希望我的Swagger在生产环境中使用,在发布的时候不适用?
判断环境是否为测试环境,如果为测试环境则返回trun,否则为false
Profiles profiles = Profiles.of("dev", "text");
boolean flag = environment.acceptsProfiles(profiles);
获得boolean类型的flag之后再传入Docket的enable中即可
2.问题:如果有几个人同时开发写方法,我们如何进行分组呢?
创建多个的Dcoket,并对groupName进行命名即可
@Bean
public Docket docket1() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("赵层")
;
}
@Bean
public Docket docket2() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("成求")
;
}
@Bean
public Docket docket3() {
return new Docket(DocumentationType.SWAGGER_2)
.groupName("彬彬")
;
}
5.对一些属性进行添加注解信息
1.实体的api注释
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
}
2. 控制层界面api
@Api("Hello控制类")
@RestController
public class HelloController {
}
3.控制层中控制类以及参数的api
@ApiOperation("User控制类")
@PostMapping("/user")
参数的api
public User user(@ApiParam("用户名")String username) {
return new User();
}
6.在Swagger的页面进行测试
然后会显示相应的请求正确与错误,这样更有利于检查
总结:
- 我们可以通过Swagger给一些比较难理解的属性或者接口,添加注释信息
- 接口文档可实时更新
- 可以在线测试
- 可用了解可不了解,不是很紧要