Swagger学习笔记
作者:互联网
Swagger简介
前后端分离
Vue+Springboot
后端时代:前端只用管理静态页面;html---->后端。模板引擎 JSP==>后端主力
前后端分离时代:
-
后端:控制层,服务层,数据访问层
-
前端:前端控制层,视图层
- 伪造后端数据,json已经存在了,不需要后端,前端工成依旧能跑起来
-
前后端如何交互====>API
-
前后端相对独立,并且松耦合
-
前后端甚至可以部署在不同的服务器上
产生一个问题:
- 前后端集成联调,前端人员和后端人员无法做到,及时协商,尽早解决,最终导致问题集中爆发
解决方案:
- 首先制定一个schema(计划提纲),实时更新最新API,降低集成风险
- 早些年:指定word计划文档
- 前后端分离:
- 前端测试后端接口:postman
- 后端提供接口,需要实时更新最新的消息及改动
Swagger
- 世界上最流行的API框架
- RestFul API 文档在线自动生成工具=>api文档与api定义同步更新
- 直接运行,可以在线测试api接口
- 支持多种语言java,PHP
在项目中使用Swagger需要使用springfox
- swagger2
- ui
SpringBoot继承Swagger
1.新建一个springboot=web项目
2.导入相关依赖(3.0.0版本访问不了)
<!-- 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工程
4.配置Swagger===>Config
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
}
5.测试运行http://localhost:8080/swagger-ui.html
以上为集成swagger
配置Swagger
Swagger的bean实例Docket
Swagger配置扫描接口
Docket.select()
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了Swagger的Docket的bean实例
//enable:是否启用swagger,如果为false,则swagger不能在浏览器中访问
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
//.enable(false)
.select()//select和build是一对,中间只有两个方法
//RequestHandlerSelectors:配置要扫描接口的方式
//basePackage:指定扫描的包
//any():扫描全部
//none:都不扫描
//withMethodAnnotation:扫描方法上的注解
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.hbxy.controller"))
//paths():过滤什么路径
//.paths(PathSelectors.ant("/hbxy/**")) 只访问hbxy包下的
.build();
}
//配置Swagger信息=apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("Jack", "http://baidu.com", "2645738794@qq.com");
return new ApiInfo(
"Jack的SwaggerAPI文档",
"即使再小的帆也能远航",
"1.0",
"http://baidu.com",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
我只希望我的Swagger在生产环境中使用,在发布的时候不使用?
- 判断是不是生产环境 flag=false
- 注入enable( )
@Configuration
@EnableSwagger2 //开启Swagger2
public class SwaggerConfig {
//配置了Swagger的Docket的bean实例
//enable:是否启用swagger,如果为false,则swagger不能在浏览器中访问
@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)
.select()//select和build是一对,中间只有两个方法
//RequestHandlerSelectors:配置要扫描接口的方式
//basePackage:指定扫描的包
//any():扫描全部
//none:都不扫描
//withMethodAnnotation:扫描方法上的注解
//withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.hbxy.controller"))
//paths():过滤什么路径
//.paths(PathSelectors.ant("/hbxy/**")) 只访问hbxy包下的
.build();
}
//配置Swagger信息=apiInfo
private ApiInfo apiInfo(){
//作者信息
Contact contact = new Contact("Jack", "https://www.cnblogs.com/henrystudy/", "2645738794@qq.com");
return new ApiInfo(
"Jack的SwaggerAPI文档",
"即使再小的帆也能远航",
"1.0",
"https://www.cnblogs.com/guoguodong/",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList()
);
}
}
application.properties
spring.profiles.active=dev
application-dev.properties(开发环境)
server.port=8081
application-pro.properties(生产环境)
server.port=8082
配置API文档的分组
.groupName("Jack")
如何配置多个分组:多个Docket实例即可
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("Tom");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("June");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("July");
}
实体类配置;
RequestMethod.POST---》@RequestBody 一般用来处理 Content-Type: 为application/json 接收对象类型
RequestMethod.POST---》@RequestParam 这个也是从body中获取 用来处理 multipart/form-data (表单上传的)
RequestMethod.GET---》这种可以有参数用模型驱动,或者属性驱动获取,但是不可以用@注解从body获取
User.java
//@Api("注释")和@ApiModel("用户实体类")等价
@ApiModel("用户实体类")
public class User {
@ApiModelProperty("用户名")
public String username;
@ApiModelProperty("密码")
public String password;
}
HelloController.java
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(){
return "hello";
}
//只要我们的接口中,返回值中存在实体类,它就会被扫描到Swagger中
@PostMapping("/user")
public User user(){
return new User();
}
//iOperation接口,不是放在类上的,是放在方法上
@ApiOperation("Hello控制类")
@GetMapping("/hello2")
public String hello(@ApiParam("用户名") String username){
return "hello"+username;
}
@ApiOperation("Post测试类")
@PostMapping("/postt")
public User postt(@ApiParam("用户名") User user){
return user;
}
}
Swagger皮肤设置
-
bootstrap-ui 访问 http://localhost:8080/doc.html
<!-- 引入swagger-bootstrap-ui包 /doc.html--> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.1</version> </dependency>
-
Layui-ui 访问 http://localhost:8080/docs.html
<!-- 引入swagger-ui-layer包 /docs.html--> <dependency> <groupId>com.github.caspar-chen</groupId> <artifactId>swagger-ui-layer</artifactId> <version>1.1.3</version> </dependency>
总结:
- 可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
- 接口文档实时更新
- 可以在线测试
Swagger是一个优秀的工具
【注意点】在项目正式发布的时候,关闭Swagger!!!处于安全考虑并且节省内存
标签:return,com,笔记,学习,new,Swagger,Docket,public 来源: https://www.cnblogs.com/henrystudy/p/15371667.html