学习视频链接:小狂神Springboot
贵在坚持、难在坚持、成在坚持。
故事还是要从前后端分离讲起啊
**前后端分离:**VUE+SpringBoot 基本上都用这一套
**后端时代:**前端只用管理静态页面,html===》后端,使用模版引擎 jsp=》后端主力
前后端分离时代:
产生一个问题:
解决问题:
官网:https://swagger.io/
Swagger:
在项目中使用Swagger需要Springfox
配置呢,Swagger有自己的实例
我们使用docket来配置swagger的基本信息
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
// 配置swagger基本信息
private ApiInfo apiInfo(){
Contact contact = new Contact("xxx", "hyc.com", "3132774018@qq.com");
return new ApiInfo(
"XXX的swagger",
"签名",
"1.0",
"hyc.com",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
应为没有set方法所以我们只能用构造器,貌似,还有一个什么biuder可以使用,有机会去试试
select()来设置扫描
扫描接口配置的方法:
apis:
path:过滤哪里什么路径
.select()
//指定我们需要基于什么包扫描
.apis(RequestHandlerSelectors.basePackage("com.hyc.springbootswagger.controller"))
.build();
使用了自定义,那么swagger就不会去扫描其他的位置,会扫描你指定的这个报下的请求
可以发现,现在只有controller下的请求才会被扫描
.enable(false)//eanble决定了是否启动swagger
如果为false那我们就无法进入swagger-ui/index.html了
environment.acceptsProfiles
来判断是否处在环境中
//配置swagger要使用的环境
Profiles profiles = Profiles.of("dev", "test");
用profiles来配置使用环境
.enable(flag)//eanble判断是否启动swagger
分组,如何分组,
.groupName("胡宇辰")
分组,如何多个分组?,我有多个docket就可以有多个.groupName
@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())
.groupName("胡宇辰")
.enable(flag)//eanble决定了是否启动swagger
.select()
//指定我们需要基于什么包扫描
/*apis
* RequestHandlerSelectors扫描接口的方式
* basePackage指定扫描包
* any()扫描全部
* none()不扫描
* withclassannotation 扫描类的注解(里面必须放注解的反射对象)
*
*/
.apis(RequestHandlerSelectors.basePackage("com.hyc.springbootswagger.controller"))
/*path:过滤哪里什么路径
*
* */
// .paths(PathSelectors.ant("/hyc/**"))
.build();
}
@Bean
public Docket docket1(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("小刘");
}
@Bean
public Docket docket2(Environment environment){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("小郑");
}
配置多个组
就是有很多个docket,
效果:
只要我们的接口中,有接口返回的是实体类,那么就是会被swagger扫描
我们写一个方法
@PostMapping("/user")
public User user(){
return new User();
}
返回的是实体类user,user里有两个字段,name和age
页面效果图:
那我们看到的如@API这些注解是干什么的呢?
用来解释类的用@Apimodel
@ApiModel("用户信息实体类")
public class User{
}
用来解释类中的属性用@ApiModelProperty()
@ApiModelProperty("用户名字")
public String name;
@ApiModelProperty("用户年龄")
public int age;
小疑问:我用private修饰的变量这么写就不显示,怎么办?
解决方案:写在get方法上就可以有效果了
测试接口十分好用,
我们可以测试自己的接口是否有效
小测试:
测试接口:
@PostMapping("/userJY")
public User user2(String name,int age){
User user = new User(name,age);
return user;
}
测试页面步骤图
查看提交后的接口信息
Swagger是一个十分好用的工具,很多公司在使用
PS:处于安全考虑,我们在发布的时候需要关闭Swagger