Spring Boot2.7.2整合Swagger
整合Swagger2.9.2
写这篇博客的原因是因为最近在写一个小demo遇到的问题,SpringBoot2.7.2版本在整合Swagger2.9.2(比较经典的一个版本)
时报错了,百度了一下解决办法就是降低Spring Boot版本至2.6.X版本以下
,如果不想降低Spring Boot版本的可以和我这样做,非常简单:
1、添加Swagger2依赖
在pom.xml文件中加入以下依赖。
<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>
2、创建Swagger2的Java配置类
import io.swagger.annotations.Api;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author SLQ1893
* http://localhost:8080/swagger-ui.html
* http://localhost:8080/v2/api-docs
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
//.host("host") // 设置host, 如果前端文档有代理,在SwaggerFilter中进行过滤并删除这个属性,否则接口无法调用
.select()
/*
下面这行代码是告诉 Swagger 要扫描有 @Api 注解的类,
可以将 Api.class 替换成 ApiOperation.class 扫描带有 @ApiOperation 注解的方法。
当然还可以使用 basePackage() 方法配置 Swagger 需要扫描的包路径。
*/.apis(RequestHandlerSelectors.withClassAnnotation(Api.class)).paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
// 文档标题
.title("测试Spring Boot2.7.2整合Swagger2.9.2")
// 文档描述
.description("RESTFul接口文档说明").termsOfServiceUrl("https://gitee.com/slq1893").version("1.0").build();
}
}
3、编辑文档接口信息
@RestController
@RequestMapping("/user")
@Api(value = "测试接口", tags = "用户管理相关接口")
public class UserController {
@Autowired
private UserService userService;
/**
* 全部查询人员
* @return
*/
@GetMapping
@ApiOperation(value="全部查询人员")
@RequestMapping(method = RequestMethod.GET)
public List<User> getAllUser() {
return userService.list();
}
}
4、application.yml配置文件中加入如下配置(关键步骤)
spring:
mvc:
pathmatch:
matching-strategy: ant_path_matcher
OK了,就多增加了一个第4步骤。
swagger2文档的默认地址是 /swagger-ui.html
, 本地开发的访问 http://localhost:端口/swagger-ui.html就可以看到自动生成的文档了。
整合Swagger3.0.0
1、添加Swagger3依赖
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
2、创建Swagger3的Java配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
/**
* @author SLQ1893
* http://localhost:8080/swagger-ui/
*/
@Configuration
@EnableOpenApi
public class Swagger3Config {
@Bean
public Docket docket() {
return new Docket(DocumentationType.OAS_30).apiInfo(apiInfo()).enable(true).select()
//添加swagger接口提取范围,修改成指向你的controller包
.apis(RequestHandlerSelectors.basePackage("com.slq.springboot.controller"))
.paths(PathSelectors.any()).build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("后台管理系统接口文档").description("这是一个后台管理系统")
.contact(new Contact("SLQ1893", "https://gitee.com/slq1893", "slq1893@163.com"))
.version("1.0").build();
}
}
其他步骤同整合Swagger2.9.2一致。
swagger3文档的默认访问地址是http://localhost/swagger-ui/
好像与Swagger3没啥区别
都看到这了,难道不给博主点个赞嘛
常用注解
Swagger2提供了一些注解来丰富接口的信息,常用的有:
@ApiOperation
:用在方法上,说明方法的作用
value
: 表示接口名称
notes
: 表示接口详细描述
@ApiImplicitParams
:用在方法上包含一组参数说明
@ApiImplicitParam
:用在@ApiImplicitParams注解中,指定一个请求参数的各个方面
paramType
:参数位置
header 对应注解:@RequestHeader
query 对应注解:@RequestParam
path 对应注解: @PathVariable
body 对应注解: @RequestBody
name
:参数名
dataType
:参数类型
required
:参数是否必须传
value
:参数的描述
defaultValue
:参数的默认值
@ApiResponses
:用于表示一组响应
@ApiResponse
:用在@ApiResponses中,一般用于表达一个错误的响应信息
code
:状态码
message
:返回自定义信息
response
:抛出异常的类