在前后端分离开发的过程中,前端和后端需要进行api对接进行交互,就需要一个api规范文档,方便前后端的交互,但api文档不能根据代码的变化发生实时动态的改变,这样后端修改了接口,前端不能及时获取最新的接口,导致调用出错,需要手动维护api文档,加大了开发的工作量和困难,而swagger的出现就是为了解决这一系列的问题。Swagger是一系列用于RESTful API开发的工具。
导入依赖
-
<dependency>
-
<groupId>io.springfox</groupId>
-
<artifactId>springfox-swagger2</artifactId>
-
<version>
2.9
.1</version>
-
</dependency>
-
<dependency>
-
<groupId>io.springfox</groupId>
-
<artifactId>springfox-swagger-ui</artifactId>
-
<version>
2.9
.1</version>
-
</dependency>
配置Swagger
-
@Configuration
-
@EnableSwagger2
-
public
class
SwaggerConfig {
-
@Bean
-
public Docket
docket
(){
-
return
new
Docket(DocumentationType.SWAGGER_2)
-
.apiInfo(apiInfo())
-
//分组的名字
-
.groupName(
"yu")
-
//设置为哪些目标接口生成接口文档
-
.select()
-
.apis(RequestHandlerSelectors.basePackage(
"com.example.demo.controller"))
-
//任意路径
-
.paths(PathSelectors.any())
-
.build();
-
}
-
-
private ApiInfo
apiInfo
(){
-
-
//作者信息
-
Contact
contact
=
new
Contact(
"yu",
"https://blog.csdn.net/qq_43649937?type=blog",
"2248406167@qq.com");
-
-
return
new
ApiInfo(
-
"yu的swaggerAPI文档",
-
"11",
-
"v1.0",
-
"https://blog.csdn.net/qq_43649937?type=blog",
-
contact,
-
"Apache2.0",
-
"http://www.apache.org/licenses/LICENSE-2.0",
-
new
ArrayList()
-
);
-
}
-
-
}
然后访问http://localhost:8080/swagger-ui.html就可以访问 swagger界面了,在这里我在运行 时出现了以下这样的问题,org.springframework.context.ApplicationContextException: Failed to start bean
在经过查资料得以解决这个问题:Springfox使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher,因此需要在application.properties里配置spring.mvc.pathmatch.matching-strategy=ANT_PATH_MATCHER ,最终问题得以解决。
然后就是如果配置了拦截器记住一定要放行swagger,不然无法访问,在拦截器配置中放行路径如下
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
Swagger常用注解
@Api()用于类;
表示标识这个类是swagger的资源 ,@Api 注解用于标注一个Controller(Class)
@ApiOperation()用于方法;
表示一个http请求的操作
@ApiParam()用于方法,参数,字段说明;
表示对参数的添加元数据(说明或是否必填等)
@ApiModel()用于类
表示对类进行说明,用于参数用实体类接收
@ApiModelProperty()用于方法,字段
表示对model属性的说明或者数据操作更改
@ApiIgnore()用于类,方法,方法参数
表示这个方法或者类被忽略
@ApiImplicitParam() 用于方法
表示单独的请求参数
@ApiImplicitParams() 用于方法,包含多个 @ApiImplicitParam
转载:https://blog.csdn.net/qq_43649937/article/details/128651804