SpringBoot集成Swagger
1.Swagger简介
一般我们在对接前后端的时候,都需要提供相应的接口文档。对于后端来说,编写接口文档即费时费力,还会经常因为没有及时更新,导致前端对接时出现实际接口与文档不一致。而且手写接口文档还容易出错,而swagger很好的解决了这个痛点。
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。可用于:1.接口的文档在线自动生成、2.功能测试。
前后端分离
Vue+SpringBoot
后端时代:前端只用管理静态页面,htnl=>后端,模板引擎 jsp=>后端主力
前后端分离时代:
- 后端:后端控制层,服务层,数据访问层【后端团队】
- 前端:前端控制层,视图层【前端团队】
- 伪造后端数据,json,已经存在,不需要后端,前端工程依旧能够跑起来
- 前后端如何交互?==>API
- 前后端相对独立,松耦合
- 前后端甚至可以部署在不同的服务器上
产生一个问题:
- 前后端集成联调,前端人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发;
解决方案:
- 首先指定schema[计划的提纲],实时更新最新API,降低集成的风险;·
- 早些年:指定word计划文档;
- 前后端分离:
- 前端测试后端接口: postman
- 后端提供接口,需要实时更新最新的消息及改动!
2.Swagger
- 号称世界上最流行的Api框架;
- RestFul Api文档在线自动生成工具=>Api文档与API定义同步更新
- 直接运行,可以在线测试API接口;
- 支持多种语言: (Java,Php…
官网:
在项目使用Swagger需要springbox;
- swagger2
- ui
3.SpringBoot集成Swagger
1.导入依赖swagger2和swagger-ui
<!-- 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>
2.配置swagger
@Configuration
@EnableSwagger2
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("张三","www.baidu.com","1234567@qq.com");
return new ApiInfo("第一个Swagger",
"你好Swagger",
"v2.0",
"www.baidu.com",
contact,
"Apacho 2.0",
"www.baidu.com",
new ArrayList<>());
}
}
3.测试:http://localhost:8080/swagger-ui.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgKkN0z8-1659008896317)(C:\Users\xhd\AppData\Roaming\Typora\typora-user-images\image-20220728150438058.png)]
3.1配置扫描接口
Docket.select()
//配置了Swagger的Docket的Bean实例
@Bean
public Docket docket(Environment environment){
//设置要显示swagger的环境
Profiles profiles = Profiles.of("dev");
//通过 判断是否处在当前环境中
boolean flag=environment.acceptsProfiles(profiles);
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//配置是否启用注解
.enable(flag)
.select()
//RequestHandlerSelectors ,配置需要扫描接口的方式
//basePackage:指定要扫描的包
//any() :扫描全部
//none(): 不扫描
//withClassAnnotation 扫描类上的注解,参数是一个注解的反射对象
//withMethodAnnotation 扫描方法上的注解
.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
//指定什么路径
.paths(PathSelectors.ant("/hello/**"))
.build();
}
我只希望我的Swagger在生产环境中使用,在发布的时候不使用?
- 判断是不是生产环境flag = false
- 注入enable (flag)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OKW6VWTk-1659008896318)(C:\Users\xhd\AppData\Roaming\Typora\typora-user-images\image-20220728155703973.png)]
3.2测试
1.分组
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
2.编写实体类
@ApiModel("用户实体类")
public class User {
//取别名
@ApiModelProperty("用户名")
private String username;
@ApiModelProperty("密码")
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.编写控制层
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello world!";
}
@ApiOperation("Hello控制类")
@GetMapping(value = "/hello2")
public String hello2(@ApiParam("用户名") String username){
return "hello"+username;
}
@ApiOperation("Post测试类")
@PostMapping(value = "/post")
public User post(@ApiParam("用户")User user){
return user;
}
}
4,在页面输入用户名,密码进行测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mPrZ7LJ1-1659008896318)(C:\Users\xhd\AppData\Roaming\Typora\typora-user-images\image-20220728163838779.png)]
4.总结
1.我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
2接口文档实时更新
3.可以在线测试
Swagger是一个优秀的工具,几乎所有大公司都有使用它
ser post(@ApiParam(“用户”)User user){
return user;
}
}
4,在页面输入用户名,密码进行测试
[外链图片转存中...(img-mPrZ7LJ1-1659008896318)]
## 4.总结
1.我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
2接口文档实时更新
3.可以在线测试
Swagger是一个优秀的工具,几乎所有大公司都有使用它
【注意点】在正式发布的时候,关闭Swagger! ! !出于安全考虑。而且节省运行的内存;|