使用SpringDoc生成接口文档
定义文档标题、文档版本号等信息。description = "UJCMS 接口文档",也可使用Java代码@Beanreturn new OpenAPI().info(new Info().title("UJCMS API").description("UJCMS 接口文档").version("1.0.0"));info:description: UJCMS 接口文档。
2022-09-24 11:34 阅读7774
SpringDoc是用于生成SpringBoot项目API文档的Java库。在代码中使用swagger-api
注解,即可生成相应的API文档,和JavaDoc非常类似。
SpringDoc基于Swagger 3
,Swagger 3
包名为io.swagger.core.v3
。
Swagger 3
实现了OpenAPI 3
接口规范,类似Hibernate
实现JPA
规范。Swagger 3
提供了API注解,还提供了Swagger-ui
用于生成API文档界面,以及其它的基础功能。
SpringDoc的作用主要是将Swagger 3
和SpringBoot
结合起来。
快速使用
只需要在pom.xml
中引入SpringDoc即可。
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.6.11</version>
</dependency>
启动程序后,访问/swagger-ui/index.html
,就会显示API文档页面。
也可访问/v3/api-docs
,返回的是API文档的JSON
结构数据。可以用该数据生成其它风格的API文档页面,比如可以提供给Apifox
生成API文档。
文档生成的原理是通过扫描源代码中的Controller
,根据RequestMapping
和相应方法的参数生成文档。
API注解
上面生成的文档并没有良好的注释,我们可以通过swagger-api
注解,给接口加上注释。注解的包路径为io.swagger.v3.oas.annotations
@Tag(name = "ArticleController", description = "文章接口")
@RestController
public class ArticleController {
@Operation(summary = "根据文章ID获取文章对象")
@ApiResponses(value = {@ApiResponse(description = "文章对象")})
@GetMapping("/article/{id}")
public Article getArticleById(@Parameter(description = "文章ID", required = true) @PathVariable("id") Integer id) {
...
}
}
- 类注释:
@Tag(name = "ArticleController", description = "文章接口")
- 方法注释:
@Operation(summary = "根据文章ID获取文章对象")
- 参数注释:
@Parameter(description = "文章ID", required = true)
- 返回值:
@ApiResponses(value = {@ApiResponse(description = "文章对象")})
OpenAPI规范
接口文档基于OpenAPI
规范,了解OpenAPI
规范有助于了解完整接口文档的编写方式。
参考资料:OpenAPI基本结构
上面的注解对应的OpenAPI
规范大致如下:
paths:
/article/{id}:
get:
summary: 根据文章ID获取文章对象
parameters:
- name: id
in: path
required: true
description: 文章ID
schema:
type : integer
format: int32
responses:
default:
description: 文章对象
实体类注解
除了对API进行注解,还可对实体类进行注解。同时支持JSR-303注解。
@Schema(description = "文章")
@NotNull(message = "不能为空")
public class Article extends Serializable {
@Schema(description = "标题")
private String title;
}
文档定义
定义文档标题、文档版本号等信息。
@OpenAPIDefinition(
info = @Info(
title = "UJCMS API",
description = "UJCMS 接口文档",
version = "1.0.0"
)
)
@Configuration
public class SwaggerConfig {
}
也可使用Java代码
@Bean
public OpenAPI openApi() {
return new OpenAPI().info(new Info().title("UJCMS API").description("UJCMS 接口文档").version("1.0.0"));
}
对应的OpenAPI规范:
info:
title: UJCMS API
description: UJCMS 接口文档
version: 1.0.0
文档分组
如果接口较多,可以对接口进行分组,方便查看。
@Configuration
public class SwaggerConfig {
/**
* 前台 API 分组
*/
@Bean
public GroupedOpenApi frontendGroup(@Value() {
return GroupedOpenApi.builder().group("frontend").displayName("前台API")
.addOpenApiCustomiser(openApi -> openApi.info(new Info().title("UJCMS 前台 API").version("1.0.0")))
.packagesToScan("com.ujcms.cms.core.web.api")
.pathsToMatch("/api/**")
.build();
}
/**
* 后台 API 分组
*/
@Bean
public GroupedOpenApi backendGroup() {
return GroupedOpenApi.builder().group("backend").displayName("后台API")
.addOpenApiCustomiser(openApi -> openApi.info(new Info().title("UJCMS 后台 API").version("1.0.0")))
.packagesToScan("com.ujcms.cms.core.web.backendapi")
.pathsToMatch("/api/backend/**")
.build();
}
}
也可在配置文件中设置分组:
springdoc.group-configs:
- group: frontend
displayName: 前台API
packagesToScan: com.ujcms.cms.core.web.api
pathsToMatch: /api/**
- group: backend
displayName: 后台API
packagesToScan: com.ujcms.cms.core.web.backendapi
pathsToMatch: /api/backend/**
权限认证
Swagger不仅能够查看文档,还能在线执行API,不仅能说还能练。
很多情况下API需要登录才能执行,这就需要权限认证。
以前面的后台API为例,增加权限认证的方式如下:
private static final String BEARER_AUTH = "bearerAuth";
@Bean
public GroupedOpenApi backendGroup() {
return GroupedOpenApi.builder().group("backend").displayName("后台API")
.addOpenApiCustomiser(openApi -> openApi.info(new Info().title("UJCMS 后台 API").version("1.0.0")))
.packagesToScan("com.ujcms.cms.core.web.backendapi")
.pathsToMatch("/api/backend/**")
.addOpenApiCustomiser(openApi -> openApi.components(new Components()
.addSecuritySchemes(BEARER_AUTH, new SecurityScheme()
.type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT"))))
.addOperationCustomizer((operation, handlerMethod) -> {
operation.addSecurityItem(new SecurityRequirement().addList(BEARER_AUTH));
return operation;
})
.build();
}
此时API接口文档处会出现Authorize
按钮。
填入Bearer
内容,即可完成登录。
参考资料:Authentication
Swagger2 升级 Swagger3
- @Api → @Tag
- @ApiIgnore → @Parameter(hidden = true) or @Operation(hidden = true) or @Hidden
- @ApiImplicitParam → @Parameter
- @ApiImplicitParams → @Parameters
- @ApiModel → @Schema
- @ApiModelProperty(hidden = true) → @Schema(accessMode = READ_ONLY)
- @ApiModelProperty → @Schema
- @ApiOperation(value = “foo”, notes = “bar”) → @Operation(summary = “foo”, description = “bar”)
- @ApiParam → @Parameter
- @ApiResponse(code = 404, message = “foo”) → @ApiResponse(responseCode = “404”, description = “foo”)
SpringDoc 配置
常用配置项:
springdoc.api-docs.enabled
:api-docs是否开启。默认开启。springdoc.swagger-ui.enabled
: swagger-ui是否开启。默认开启。springdoc.packages-to-scan
: API文档的包扫描路径。默认扫描所有包。springdoc.paths-to-match
: API文档的包含的请求路径。默认包含所有请求路径。
完整的配置文档:OpenAPI 3 Library for spring-boot
参考资料
- Swagger 文档:About Swagger Specification | Documentation | Swagger
- SpringDoc 文档:https://springdoc.org
- SpringDoc github:GitHub - springdoc/springdoc-openapi: Library for OpenAPI 3 with spring-boot
- SpringDoc demo:https://github.com/springdoc/springdoc-openapi-demos/tree/master/springdoc-openapi-spring-boot-2-webmvc
4
0
上一篇:Spring Security 教程(五):加密算法升级
下一篇:Web图片格式介绍
相关文章
-
UJCMS如何开启SpringDoc(swagger)在线文档
2023-08-30
-
2018-07-10
-
2023-08-30
-
2018-03-26
-
2017-07-13
-
2017-08-08
-
2018-03-29
-
2023-
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)