第十三章 SpringBoot整合knife4j

这篇具有很好参考价值的文章主要介绍了第十三章 SpringBoot整合knife4j。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄
🌹简历模板、学习资料、面试题库、技术互助

🌹文末获取联系方式 📝
第十三章 SpringBoot整合knife4j,Springboot,spring boot,后端,java,Knife4j,OpenAPI2,OpenAPI3,springfox

系列专栏目录

[Java项目实战] 介绍Java组件安装、使用;手写框架等
[Aws服务器实战] Aws Linux服务器上操作nginx、git、JDK、Vue等
[Java微服务实战] Java 微服务实战,Spring Cloud Netflix套件、Spring Cloud Alibaba套件、Seata、gateway、shadingjdbc等实战操作
[Java基础篇] Java基础闲聊,已出HashMap、String、StringBuffer等源码分析,JVM分析,持续更新中
[Springboot篇] 从创建Springboot项目,到加载数据库、静态资源、输出RestFul接口、跨越问题解决到统一返回、全局异常处理、Swagger文档
[Spring MVC篇] 从创建Spring MVC项目,到加载数据库、静态资源、输出RestFul接口、跨越问题解决到统一返回
[华为云服务器实战] 华为云Linux服务器上操作nginx、git、JDK、Vue等,以及使用宝塔运维操作添加Html网页、部署Springboot项目/Vue项目等
[Java爬虫] 通过Java+Selenium+GoogleWebDriver 模拟真人网页操作爬取花瓣网图片、bing搜索图片等
[Vue实战] 讲解Vue3的安装、环境配置,基本语法、循环语句、生命周期、路由设置、组件、axios交互、Element-ui的使用等
[Spring] 讲解Spring(Bean)概念、IOC、AOP、集成jdbcTemplate/redis/事务等


系列文章目录

第一章 SpringBoot起步
第二章 springboot 配置文件、多环境配置、运行优先级
第三章 springboot 统一日志
第四章 SpringBoot加载静态文件资源
第五章 springboot 拦截器
第六章 实现自定义全局异常处理
第七章 springboot 数据库应用
第八章 springboot 整合Druid
第九章 springboot 整合MyBatis - xml、注解篇
第十一章 整合Mybatis plus
第十二章 SpringBoot整合swagger-bootstrap-ui



前言

SpringBoot整合knife4j,是swagger的升级版本。

1、Spring Boot 2

1.1、实战案例

第一步、创建springBoot项目并且在pom.xml中引入knife4j的依赖包,代码如下:

<!--引入Knife4j的官方start包,该指南选择Spring Boot版本<3.0,开发者需要注意-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
    <version>4.0.0</version>
</dependency>

第二步、创建Swagger配置依赖,代码如下:

**
 * 访问地址:http://localhost:8080/doc.html
 */
@Configuration
@EnableSwagger2WebMvc
public class Knife4jConfiguration {

    @Bean(value = "dockerBean")
    public Docket dockerBean() {
        //指定使用Swagger2规范
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        //描述字段支持Markdown语法
                        .description("# Knife4j 接口文档")//简介
                        .termsOfServiceUrl("大帅杯")//服务Url
                        .contact("只因你太美")//作者名
                        .version("1.0")//版本
                        .build())
                //分组名称
                .groupName("用户服务")
                .select()
                //这里指定Controller扫描包路径自己的包,不然会是空的
                .apis(RequestHandlerSelectors.basePackage("com.jiangweicong.seckill.controller"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }
}

第三步、加载静态文件,以及配置了拦截器,放行路径

@Configuration
public class MyWebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //加载public文件夹数据
        registry.addResourceHandler("/public/**")
                .addResourceLocations("classpath:/public/");
        /** 配置knife4j 显示文档 */
        registry.addResourceHandler("doc.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        /** 公共部分内容 */
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
    /**
	*一般拦截器是在Bean实例化之前就已经开启,
	*所以当拦截器调用redis工具类或者其他service层的时候会一直显示为null,
	*因为这个时候Bean还未实例化,所以无法调用
    *因此加入拦截器的时候要先用@Bean将拦截器先实例化,再将拦截器进行注册
	*/
    @Bean
    public Interceptor getInterceptor(){
        return new Interceptor();
    }
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getInterceptor()).addPathPatterns("/**").
                excludePathPatterns("/","*/login","*.html","/images/**","/doc.html","/webjars/**","/swagger-resources","/swagger-resources/**","/v3/**");
    }
}

这里还有一个注意事项就是,用继承WebMvcConfigurationSupport方法的时候千万不能加@EnableWebMVC这个注解,因为我们是用继承的方法所以用该注解的时候他加载的是他本身的实现的内容,而我们自定义的静态文件就都不会加载。或者是直接WebConfig类直接实现WebMvcConfigurer的情况下才能加这个注解

第四步、新建一个接口Controller类

@Api(tags = "登录模块")
@RestController
public class IndexController {
    
    @ApiOperation(value = "登录")
   	@ApiImplicitParams({
            @ApiImplicitParam(name = "name", value = "用户名", paramType = "query", dataType = "String" ),
            @ApiImplicitParam(name = "pwd", value = "密码", paramType = "query", dataType = "int" )
    })
    @PostMapping("/login")
    public String login(@RequestParam(value = "name")String name,
                        @RequestParam(value = "pwd")int pwd){
        String login=name+pwd;
        return login;
    }
}

第五步、访问文档首页

http://localhost:8080/doc.html


1.2、官方文章案例

提示
● Spring Boot 版本建议 2.4.0~3.0.0之间
● Spring Boot 版本 < 2.4 版本则建议选择Knife4j 4.0之前的版本
● Spring Boot 2 + OpenAPI2 demo:knife4j-spring-boot27-demo
● Spring Boot 2 + OpenAPI3 demo:knife4j-springdoc-openapi-demo

OpenAPI2

OpenAPI2(Swagger)规范是Knife4j之前一直提供支持的版本,底层依赖框架为Springfox,此次在4.0版本开始
Knife4j有了新的变化,主要有以下几点:
● Springfox版本选择的依然是2.10.5版本,而并非springfox最新3.0.0版本
● 不支持以Springfox框架为基础的OpenAPI3规范,放弃Springfox项目的后续版本适配支持工作
● Spring Boot 版本建议 2.4.0~3.0.0之间
可以使用 knife4j-openapi2-spring-boot-starter,maven 坐标如下:

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

配置yml属性,如下:

knife4j:
  enable: true
  openapi:
    title: Knife4j官方文档
    description: "`我是测试`,**你知道吗**
    # aaa"
    email: xiaoymin@foxmail.com
    concat: 八一菜刀
    url: https://docs.xiaominfo.com
    version: v4.0
    license: Apache 2.0
    license-url: https://stackoverflow.com/
    terms-of-service-url: https://stackoverflow.com/
    group:
      test1:
        group-name: 分组名称
        api-rule: package
        api-rule-resources:
          - com.knife4j.demo.new3

最后,访问Knife4j的文档地址:http://ip:port/doc.html即可查看文档

OpenAPI3

OpenAPI3的规范,目前针对Java的Spring Boot项目,主要支持的有2个版本
● springfox 3.0.0: 同时兼容OpenAPI2以及OpenAPI3,但是停更很久了
● springdoc-openapi: 兼容OpenAPI3规范,更新速度频繁
Knife4j在只有的OpenAPI3规范中,底层基础框架选择springdoc-openapi项目
针对Springfox3.0.0版本会放弃。
建议开发者如果使用OpenAPI3规范的话,也尽快迁移过来。
可以使用 knife4j-openapi3-spring-boot-starter,maven 坐标如下:

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

引入jar包后,同上面的Spring Boot 3版本使用方式一样,进行配置即可。


2、Spring Boot 3

提示
● Spring Boot 3 只支持OpenAPI3规范
● Knife4j提供的starter已经引用springdoc-openapi的jar,开发者需注意避免jar包冲突
● JDK版本必须 >= 17
● 详细Demo请参考knife4j-spring-boot3-demo
首先,引用Knife4j的starter,Maven坐标如下:

<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
    <version>4.4.0</version>
</dependency>

Gradle坐标如下:

implementation(“com.github.xiaoymin:knife4j-openapi3-jakarta-spring-boot-starter:4.4.0”)

引入之后,其余的配置,开发者即可完全参考springdoc-openapi的项目说明,Knife4j只提供了增强部分,如果要启用Knife4j的增强功能,可以在配置文件中进行开启
部分配置如下:

# springdoc-openapi项目配置
springdoc:
  swagger-ui:
    path: /swagger-ui.html
    tags-sorter: alpha
    operations-sorter: alpha
  api-docs:
    path: /v3/api-docs
  group-configs:
    - group: 'default'
      paths-to-match: '/**'
      packages-to-scan: com.xiaominfo.knife4j.demo.web
# knife4j的增强配置,不需要增强可以不配
knife4j:
  enable: true
  setting:
    language: zh_cn

Knife4j更多增强配置明细,请移步文档进行查看
最后,使用OpenAPI3的规范注解,注释各个Spring的REST接口,示例代码如下:

@RestController
@RequestMapping("body")
@Tag(name = "body参数")
public class BodyController {

   @Operation(summary = "普通body请求")
   @PostMapping("/body")
   public ResponseEntity<FileResp> body(@RequestBody FileResp fileResp){
       return ResponseEntity.ok(fileResp);
   }

   @Operation(summary = "普通body请求+Param+Header+Path")
   @Parameters({
           @Parameter(name = "id",description = "文件id",in = ParameterIn.PATH),
           @Parameter(name = "token",description = "请求token",required = true,in = ParameterIn.HEADER),
           @Parameter(name = "name",description = "文件名称",required = true,in=ParameterIn.QUERY)
   })
   @PostMapping("/bodyParamHeaderPath/{id}")
   public ResponseEntity<FileResp> bodyParamHeaderPath(@PathVariable("id") String id,@RequestHeader("token") String token, @RequestParam("name")String name,@RequestBody FileResp fileResp){
       fileResp.setName(fileResp.getName()+",receiveName:"+name+",token:"+token+",pathID:"+id);
       return ResponseEntity.ok(fileResp);
   }
}

最后,访问Knife4j的文档地址:http://ip:port/doc.html即可查看文档


总结

文章里介绍了Knife4j的OpenAPI2、OpenAPI3规范,以及其支持的Spring Boot版本,同时文章里也加上了大量的实战案例,使得新手也可以很快速的上手,获取UI精美的文档帮助系统。


联系方式

微信公众号:Java微服务架构

第十三章 SpringBoot整合knife4j,Springboot,spring boot,后端,java,Knife4j,OpenAPI2,OpenAPI3,springfox文章来源地址https://www.toymoban.com/news/detail-777799.html

到了这里,关于第十三章 SpringBoot整合knife4j的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot整合knife4j(快速入门超详细版)

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

    2024年02月10日
    浏览(36)
  • SpringBoot3中Swagger整合knife4j和springdoc的配置说明

      springboot3开始javax包改成了jakarta,而swagger-oas等包中依然使用的是javax所以报错。另外springfox已经过时了,两年没更新了,并且不支持OpenAPI3 标准,而SpringBoot3只支持OpenAPI3规范,所以要迁移到springdoc Knife4J是一款基于Swagger快速生成API文档和调试平台的开源工具,它可以轻松地

    2024年02月04日
    浏览(51)
  • Swagger + Knife4j 接口文档的整合

    Swagger 接口文档的整合: 引入依赖(Swagger 或 Knife4j)。 自定义 Swagger 配置类。 定义需要生成接口文档的代码位置(Controller)。 注意:线上环境不要把接口暴露出去!!!可以通过在 SwaggerConfig 配置文件开头加上 @Profile({“dev”, “test”}) 限定配置仅在部分环境开启。 启动

    2024年01月20日
    浏览(52)
  • Spring Boot 2.6 以上整合 Swagger + Knife4j 报错

    这个问题主要出现在 Spring Boot 2.6 及以后,只要是 Spring Boot 2.6 引入的新 PathPatternParser 导致的。 两种解决办法 Path匹配策略切换回 ​​ant_path_matcher ​ 添加下面这个Bean的定义

    2024年01月17日
    浏览(55)
  • Spring Boot3整合knife4j(swagger3)

    目录 1.前置条件 2.导依赖 3.配置 已经初始化好一个spring boot项目且版本为3X,项目可正常启动。 作者版本为3.2.2 初始化教程: 新版idea创建spring boot项目-CSDN博客 https://blog.csdn.net/qq_62262918/article/details/135785412?spm=1001.2014.3001.5501 knife4j官网: Knife4j · 集Swagger2及OpenAPI3为一体的增强

    2024年01月23日
    浏览(47)
  • springboot集成knife4j详细教程

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

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

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

    2024年02月10日
    浏览(39)
  • 【SpringBoot笔记42】SpringBoot集成knife4j生成接口文档

    这篇文章,主要介绍SpringBoot如何集成knife4j及生成接口文档。 目录 一、knife4j接口文档生成器 1.1、接口文档工具介绍 1.2、引入依赖

    2024年02月05日
    浏览(35)
  • Spring Cloud Gateway 网关整合 Knife4j 4.3 实现微服务接口文档聚合

    🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请纠正! youlai-mall 开源微服务商城新版本基于 Spring Boot 3 和 Java 17,同时采用 Knife4j 4.3。与以前版本不同的是

    2024年02月05日
    浏览(51)
  • 【SpringBoot】SpringBoot引入接口文档生成工具(Swagger+Knife4j)

    由于目前工作项目写的接口越来越多了,为了能够更加方便地优化接口,以及整理接口文档,所以就考虑引入接口文档生成工具。目前的接口文档生成工具被提及较多的是Swagger,经过了引入尝试后,Swagger是比较轻松地就被引入了。但是Swagger页面属实是难以恭维,比较简单但

    2024年01月23日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包