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

这篇具有很好参考价值的文章主要介绍了【超详细】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:

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.15</version></dependency>复制代码

注释的区别

这里需要注意,我们要用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/")
                );
    }

    /**
     * GroupedOpenApi 是对接口文档分组,类似于 swagger 的 Docket
     * 
     * @return
     */@Beanpublic GroupedOpenApi authApi() {
        return GroupedOpenApi.builder()
                // 组名
                .group("认证接口")
                // 扫描的路径,支持通配符
                .pathsToMatch("/login")
                // 扫描的包
                .packagesToScan("com.demo.controller.auth")
                .build();
    }
    
    @Beanpublic GroupedOpenApi sysApi() {
        return GroupedOpenApi.builder()
                .group("系统接口")
                .pathsToMatch("/sys/**")
                // 添加自定义配置,这里添加了一个用户认证的 header,否则 knife4j 里会没有 header
                .addOperationCustomizer((operation, handlerMethod) -> operation.security(
                        Collections.singletonList(newSecurityRequirement().addList(TOKEN_HEADER)))
                )
                .build();
    }
}
复制代码

访问文档

配置完成之后,就可以访问文档地址:http://localhost:${port}/${context-path}/swagger-ui/html.index

❗ 如果你加入了拦截器或引入了spring-security等权限框架,需要放通文档地址及静态资源:

- /**/*.html
- /**/*.css
- /**/*.js
- /**/api-docs/**
复制代码

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

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

集成knife4j

Maven引入

在maven里引入knife4j

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifactId><version>4.0.0</version></dependency>复制代码

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

  • Spring Boot 3 只支持OpenAPI3规范

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

  • JDK版本必须 >= 17

而且需要引入这个包:

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.0.0</version></dependency>复制代码

访问文档地址

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

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

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

作者:penga

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

文章来源地址https://www.toymoban.com/news/detail-425274.html

到了这里,关于【超详细】springboot + springdoc-openapi + knife4j 集成案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot 3.x 引入springdoc-openapi (内置Swagger UI、webmvc-api)

    接触的原因 因开发自己的项目时,写接口文档很繁琐,查到后端都在用 swagger 等接口工具来记录接口文档,于是学习了一下,本文记录个人配置过程,有问题欢迎指正交流😁 Swagger: Swagger是一种Rest API的表示方式,它是标准的、语言无关的工具,这种表示方式不仅人可读,

    2024年04月27日
    浏览(33)
  • 【Openapi-ui+Knife】springdoc-openapi-ui 整合 knife,多模块分组,脚手架

     pom文件: yum文件: swagger配置文件 访问swagger-ui: 访问doc.html: http://localhost:18080/doc.html

    2024年02月04日
    浏览(44)
  • springdoc-openapi-ui 整合 knife,多模块分组,脚手架

     pom文件: yum文件: swagger配置文件 访问swagger-ui: 访问doc.html: http://localhost:18080/doc.html

    2024年02月09日
    浏览(44)
  • springboot集成knife4j详细教程

    使用原生的swagger作为接口文档,功能不够强大,并且默认的ui比较简陋,不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址:https://gitee.com/xiaoym/knife4j 想要使用knife4j非常简单,只要在Springboot项目中引入knife4j的依赖即可 注意:引入knife4j后会自动

    2024年02月20日
    浏览(37)
  • SpringBoot整合knife4j(快速入门超详细版)

    😊 @ 作者: Eric 💖 @ 主页: https://blog.csdn.net/weixin_47316183?type=blog 🎉 @ 主题: SpringBoot整合knife4j(快速入门超详细版) ⏱️ @ 创作时间: 2023年08月01日 在日常开发中,写接口文档是我们必不可少的,而Knife4j就是一个接口文档工具,可以看作是Swagger的升级版,但是界面比S

    2024年02月10日
    浏览(36)
  • SpringBoot整合Knife4j

    ✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合Knife4j 📚个人知识库: Leo知识库,欢迎大家访问

    2024年04月11日
    浏览(35)
  • SpringBoot 整合knife4j

    Knife4j是一款基于Swagger 2的在线API文档框架 添加依赖 创建 Swagger 配置依赖 application.yml配置文件 响应参数 tips: http://127.0.0.1:8080/doc.html 这里端口,就是你运行项目的端口 springboot 中 knife4j的完整参数如下: 接口添加作者 添加作者有俩种方式 在方法上使用注解 @ApiOperationSupport

    2024年02月14日
    浏览(41)
  • 第十三章 SpringBoot整合knife4j

    🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 [Java项目实战] 介绍Java组件安装、使用;手写框架等 [Aws服务器实战] Aws Linux服务器上操作nginx、git、JDK、Vue等 [Java微服务

    2024年02月03日
    浏览(41)
  • 【SpringBoot】Swagger和knife4j的使用

    springboot笔记集合: springboot笔记合计 没用的废话理论不多说,会用就完了 Swagger 是一种开源的API描述语言,就是描述API的, 同时Swagger还提供了一组工具(也叫Swagger),可以帮助开发人员自动生成API文档、测试API并与其他系统集成。 Knife4j是基于Swagge语言延伸的另一组api工具,简

    2024年02月10日
    浏览(39)
  • springboot整合knife4j版本错误解决办法

    在springboot 2.xx的版本中整合knife4j出现如下错误解决办法: 如果 springboot version = 2.6,需要添加如下配置(yml文件中): spring: mvc: pathmatch: matching-strategy: ANT_PATH_MATCHER 第二种办法可以到官网快速开始 | Knife4j (xiaominfo.com) 下载最新的依赖 dependency groupIdcom.github.xiaoymin/groupId artifa

    2023年04月20日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包