Swagger是个非常强大的API文档工具,它们可以帮助开发人员快速创建和管理API文档,并提供了丰富的功能和可视化界面。本文将为您介绍Swagger和Knife4j的使用教程,帮助您更好地了解和使用它们。
这里是Swagger的官网:Swagger官网
Swagger是一个用于设计、构建、文档化和使用RESTful风格的Web服务的开源软件框架。它提供了一种简单而强大的方式来描述和访问API的功能,使得开发人员可以更轻松地构建和测试API。
Swagger的主要功能包括:
要使用Swagger,您需要将Swagger的库添加到您的项目中,并进行相应的配置。
pom.xml
文件中添加以下依赖:<!--引入swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.22</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.22</version>
</dependency>
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.api"))
.paths(PathSelectors.any())
.build();
}
}
在上述配置中,您需要指定API的包路径和URL路径的匹配规则。
http://localhost:8080/swagger-ui.html
来查看生成的API文档。文章中的项目在这个gitee仓库中:博客中的代码
@Configuration
@EnableWebMvc
@EnableSwagger2 // 开启Swagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
}
配置好了之后,就可以启动了。 我配置的端口号是8080,然后打开这个地址就可以进入Swagger的页面:http://localhost:8080/swagger-ui.html
这是Swagger中的Docket的各项参数
@Configuration
@EnableWebMvc
@EnableSwagger2 // 开启Swagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo());
}
// 配置Swagger信息=apiInfo
private ApiInfo apiInfo(){
// 作者的信息
Contact contact = new Contact("极客李华", "https://blog.csdn.net/qq_51447496?spm=1011.2415.3001.5343", "1369990609@qq.com");
return new ApiInfo("极客李华的SwaggerAPI文档",
"Wonder OF U",
"V1.0",
"https://blog.csdn.net/qq_51447496?spm=1011.2415.3001.5343",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0.html",
new ArrayList());
}
}
这个时候,这里的信息就发生了改变
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
// RequestHandlerSelectors 配置要扫描接口的方式
// basePackage
// any() 扫描全部
// none() 不扫描
// withClassAnnotation 扫描类上的注解,参数是一个注解的反射对象
// withMethodAnnotation 扫描方法上的注解,参数是一个注解的反射对象
.apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo.controller"))
// paths() 过滤什么路径
.paths(PathSelectors.ant("/user/**")) // 允许/user/下面所有的
.build();
}
在上面的配置中,我们只允许user下面的包,这个时候,我们的接口文档里面就只有usercontroller了
.groupName("极客李华")
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.groupName("极客李华")
.enable(true) // enable是否启动Swagger,如果为False 则无法访问Swagger
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.swaggerdemo.controller"))
.build();
}
@Bean
public Docket docket1(){
return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}
@Bean
public Docket docket2(){
return new Docket(DocumentationType.SWAGGER_2).groupName("B");
}
@Bean
public Docket docket3(){
return new Docket(DocumentationType.SWAGGER_2).groupName("C");
}
现在就有了多个分组,可以看出来,每个分组的内容都不相同
在Swagger中,有一些用于定义API文档的注解和语法,包括@ApiModel、@ApiModelProperty、@ApiParam等。下面是对这些注解和语法的详细介绍:
这里面加上了对应的注释
Swagger也是可以进行接口测试的