我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【超详细】springboot + springdoc-openapi + knife4j 集成案例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【超详细】springboot + springdoc-openapi + knife4j 集成案例

springdoc-openapi 简介

springdoc-openapijava库有助于使用 spring boot 项目自动生成 API 文档。 springdoc-openapi通过在运行时检查应用程序以根据 spring 配置、类结构和各种注释推断 API 语义来工作。

自动生成 JSON/YAML 和 HTML 格式 API 的文档。可以使用 swagger-api 注释通过注释来完成此文档。

该库支持:

  • OpenAPI3

  • SpringBoot (v1, v2 and v3)

  • JSR-303, specifically for @NotNull, @Min, @Max, and @Size.

  • Swagger-ui

  • OAuth 2

  • GraalVM 原生镜像

为什么使用 springdoc-openapi🤔

由于之前项目一直使用的是springfox3.0来集成swagger管理API接口文档,但目前springfox已经停止维护了。最近在升级底层框架时看到spring官方推荐使用springdoc,在自己一步一步查找相关资料时,发现国内对于这块的参考资料较少,也不全面。故写此篇文章来帮助大家快速集成。

Knife4j简介

Knife4j是一个集Swagger2和OpenAPI3为一体的增强解决方案。

开始集成

Maven引入

首先在maven里引入springdoc-openapi:

org.springdocspringdoc-openapi-ui1.6.15复制代码

注释的区别

这里需要注意,我们要用swagger3注释替换swagger2注释(它已经包含在springdoc-openapi-ui依赖项中)。swagger 3 注释的包是io.swagger.v3.oas.annotations:

@Api -> @Tag@ApiIgnore -> @Parameter(hidden = true) 或 @Operation(hidden = true) 或 @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")复制代码

以下举几个简单的🌰:

Controller:

@Tag(name = "用户接口")@RestController@RequestMapping("sys/user")publicclassSysUserController {    @Resourceprivate ISysUserService sysUserService;    @Operation(summary = "分页查询")@GetMapping("page")public AjaxResult queryPage(SysUserPageDTO dto) {        PageInfopage= sysUserService.queryPage(dto);        return AjaxResult.success(page);    }    @Operation(summary = "详情")@GetMapping("{id}")public AjaxResult queryInfo(@PathVariable Long id) {        SysUserDTOdto= sysUserService.queryById(id);        return AjaxResult.success(dto);    }    @Operation(summary = "新增")@PostMappingpublic AjaxResult save(@RequestBody SysUserDTO dto) {        Longid= sysUserService.saveInfo(dto);        return AjaxResult.success(id);    }}复制代码

DTO:

@Schema(description = "用户 数据传输对象")@Data@Accessors(chain = true)publicclassSysUserDTOimplementsSerializable {    @Schema(description = "ID")private Long id;    @Schema(description = "用户名")private String userName;    @Schema(description = "真实姓名")private String realName;    @Schema(description = "密码")private String password;    @Schema(description = "性别(0男,1女)")private Integer sex;    @Schema(description = "电话号码")private String phone;    @Schema(description = "状态(0停用,1正常)")private Integer status;}复制代码

配置

配置文件,更多配置请看:springdoc 核心配置

springdoc:api-docs:# 是否开启接口文档enabled:trueswagger-ui:# 持久化认证数据,如果设置为 true,它会保留授权数据并且不会在浏览器关闭/刷新时丢失persistAuthorization:true复制代码

配置文档:

❗ 这里我更推荐将文档标题、作者等信息写到application里,然后通过@ConfigurationProperties引入,会更优雅😉

@Configuration@AutoConfigureBefore(SpringDocConfiguration.class)publicclassOpenApiConfig {    privatestaticfinalStringTOKEN_HEADER="Authorization";    @Beanpublic OpenAPI openApi() {        // 针对 knife4j(增强UI),这里添加全局请求头(addParameters)无效,只能按组添加,待官方解决returnnewOpenAPI()                .components(                        newComponents().addSecuritySchemes(TOKEN_HEADER,    newSecurityScheme()            .type(SecurityScheme.Type.APIKEY)            // 这里配置 bearer 后,你的请求里会自动在 token 前加上 Bearer            .scheme("bearer")            .bearerFormat("JWT")                        ).addParameters(TOKEN_HEADER,    newParameter()            .in("header")            .schema(newStringSchema())            .name(tokenHeader)                        ))                .info(                        newInfo()    .title("文档标题")    .description("文档描述")    .contact(newContact().name("作者").email("邮箱").url("可以写你的博客地址或不填"))    // 参考 Apache 2.0 许可及地址,你可以不配此项    .license(newLicense().name("Apache 2.0").url("https://www.apache.org/licenses/LICENSE-2.0.html"))    .version("0.1")                )                // 引入外部的文档,我这里引得是 springdoc 官方文档地址,你可以不配此项                .externalDocs(newExternalDocumentation()                        .description("SpringDoc Full Documentation")                        .url("https://springdoc.org/")                );    }    @Beanpublic GroupedOpenApi authApi() {        return GroupedOpenApi.builder()                // 组名                .group("认证接口")                // 扫描的路径,支持通配符                .pathsToMatch("/login")                // 扫描的包                .packagesToScan("com.demo.controller.auth")                .build();    }        @Beanpublic GroupedOpenApi sysApi() {        return GroupedOpenApi.builder()                .group("系统接口")                .pathsToMatch("/sys*.html- *.css- *.js- api-docs/**复制代码

至此一个简单的接口文档就生成了,是不是很简单😎

集成knife4j

Maven引入

在maven里引入knife4j

com.github.xiaoyminknife4j-openapi3-spring-boot-starter4.0.0复制代码

❗ 如果你使用的是SpringBoot3,需要注意:

  • Spring Boot 3 只支持OpenAPI3规范

  • Knife4j提供的starter已经引用springdoc-openapi的jar,开发者需注意避免jar包冲突

  • JDK版本必须 >= 17

而且需要引入这个包:

com.github.xiaoyminknife4j-openapi3-jakarta-spring-boot-starter4.0.0复制代码

访问文档地址

然后你就可以直接访问文档地址了:http://localhost:${port}/${context-path}/doc.html

至此我们就集成完了,有其他疑问欢迎在评论区提出来😊

作者:penga

链接:https://juejin.cn/post/7214015651828006967

来源地址:https://blog.csdn.net/BASK2312/article/details/129764768

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【超详细】springboot + springdoc-openapi + knife4j 集成案例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Springboot集成kafka(环境搭建+演示)|超级详细,建议收藏

Springboot集成kafka 一、前言🔥二、环境说明🔥三、概念🔥四、CentOS7安装kafka🔥1.下载kafka安装包2.下载好后,进行解压 六、kafk
2023-08-19

Spring Boot 集成Redisson实现分布式锁详细案例

这篇文章主要介绍了Spring Boot 集成Redisson实现分布式锁详细案例,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录